我是python和编码的新手。我正在对一个类似于下面设置的数据集进行数据分析。
EID Hours Block Participant
0 5443 1.0 STG. x
1 5443 1.0 STG. y
2 5402 3.5 BZP. a
3 5223 1.0 STG. z
我想要输出表为:
Block Unique count. Unique sum
EID
BZP 1 3.5
STG 2 2.0
我正在尝试使用以下代码,但没有得到想要的输出
abc = df.groupby("Block").agg({'EID':['nunique'],'Hours':lambda x: sum(range(int(x.max())))})
请帮助
试试这个:
df = df.drop_duplicates(subset=['EID']).groupby('Block').agg({'EID': 'count', 'Hours': 'sum'})
结果:
EID Hours
Block
BZP. 1 3.5
STG. 2 2.0
示例:
df = pd.DataFrame({
"EID" : [5443, 5443, 5402, 5223],
"Hours": [1.0, 1.0, 3.5, 1.0],
"Block": ["STG.", "STG.", "BZP.", "STG."],
})
df.groupby("Block").agg({"EID": "nunique", "Hours": "sum"})
结果
EID Hours
Block
BZP. 1 3.5
STG. 2 3.0
你能解释一下你想用小时一栏做什么吗?2.0的输出如何?
我想你想找到最大值,然后把小时数加起来。如果是这种情况,
df.groupby(["Block", "EID"])["Hours"].max().reset_index().groupby("Block").agg({"EID" : "nunique", "Hours": "sum"}).reset_index()
输出
Block EID Hours
0 BZP. 1 3.5
1 STG. 2 2.0
这也适用于
df.groupby('Block').agg({'EID': pd.Series.nunique, 'Hours': pd.Series.sum})