Jia*_*iao 4 python dataframe pandas
我有一个像这样的数据框:
df_test = pd.DataFrame({'ID1':['A','A','A','A','A','A','B','B','B','B'],
'ID2':['a','a','a','aa','aaa','aaa','b','b','bb','bb'],
'ID3':['c1','c2','c3','c4','c5','c6','c7','c8','c9','c10'],
'condition':['','!','','!','','','!','','','!']})
Run Code Online (Sandbox Code Playgroud)
我想按 ID1 对它们进行分组。对于每个 ID2 组,结果数据帧需要像这样(count_condition 表示“!”的数量):
df_test_result = pd.DataFrame({'ID1':['A','A','A','B','B'],
'ID2':['a','aa','aaa','b','bb'],
'Count_ID2':[3,1,2,2,2],
'Count_ID3':[3,1,2,2,2],
'Count_condition': [1,1,0,1,1]})
Run Code Online (Sandbox Code Playgroud)
我尝试使用groupby和agg来获得这个结果,但我无法获得'!'的数量 对于每个组。这是我的命令
df_test_result = df_test.groupby(['ID1','ID2']).agg({'ID2':'count','ID3':'nunique','condition':'count'})
Run Code Online (Sandbox Code Playgroud)
如果有一种这样的命令是错误的:
df_test = df_test.groupby(['ID1','ID2']).agg({'ID2':'count','ID3':'nunique','condition' == '!':'count'})
Run Code Online (Sandbox Code Playgroud)
您可以使用命名的groupby:
df_test.groupby(
['ID1','ID2']).agg(
Count_ID2=('ID2', 'count'),
Count_ID3=('ID3', 'count'),
Count_condition=("condition", lambda x: str(x).count('!')))
Run Code Online (Sandbox Code Playgroud)
印刷:
Count_ID2 Count_ID3 Count_condition
ID1 ID2
A a 3 3 1
aa 1 1 1
aaa 2 2 0
B b 2 2 1
bb 2 2 1
Run Code Online (Sandbox Code Playgroud)
在上面,我们计算列“ID2”和“ID3”的出现次数,并创建一个小的自定义函数来计算“条件”列aggfunc="count"的出现次数。!我们对每个组执行上述操作,并为聚合结果返回命名列
| 归档时间: |
|
| 查看次数: |
2196 次 |
| 最近记录: |