通过groupby函数求和唯一值



我是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})

最新更新