Python 如何根据一组复杂的列条件聚合重复行
我正在使用pandas来探索包含多个重复条目的数据集。例如:Python 如何根据一组复杂的列条件聚合重复行,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我正在使用pandas来探索包含多个重复条目的数据集。例如: import pandas as pd pd.DataFrame({'ID':['001','001','002','002','002','003','003','004','004'], 'a':['Yes','Yes','Yes','No','Yes','Yes','No','No','No'], 'b':['NaN',3,'NaN',5,4,7,'NaN','NaN','Na
import pandas as pd
pd.DataFrame({'ID':['001','001','002','002','002','003','003','004','004'],
'a':['Yes','Yes','Yes','No','Yes','Yes','No','No','No'],
'b':['NaN',3,'NaN',5,4,7,'NaN','NaN','NaN']})
ID a b
001 Yes NaN
001 Yes 3
002 Yes NaN
002 No 5
002 Yes 4
003 Yes 7
003 No NaN
004 No NaN
004 No NaN
每个重复的ID
应组合成一行,在该行中,列的值根据以下规则进行聚合:
- 如果列中有,
应取代Yes
No
- 如果列中存在,则应使用一个数字替换
,如果存在多个数字,则应选择最大的数字NaN
ID a b
001 Yes 3
002 Yes 5
003 Yes 7
004 No NaN
我尝试(但失败)创建一个自定义函数,然后使用apply和lambda。然而,我不认为这是正确的方法,因为我看不到这些行操作处理一组重复项的方法。在用
np.NaN
替换+max
字符串后,可以使用'NaN'
。这特别有效,因为'Yes'>'No'
返回True
。为了提高效率,我建议您将序列a
转换为分类序列或布尔序列
# replace 'NaN' strings with np.nan
df['b'] = df['b'].replace('NaN', np.nan)
# groupby + max, reset index to elevate index to column
res = df.groupby('ID').max().reset_index()
print(res)
ID a b
0 001 Yes 3.0
1 002 Yes 5.0
2 003 Yes 7.0
3 004 No NaN