我的数据框如下:
import pandas as pd
df=pd.DataFrame({'A':['a','a','b','c'], 'B':['x','x','x','x'],'C':['1','2','3','4'], 'D':[0,0,0,0]})
gb_a=df.groupby(['A'], as_index=False)
我想要的输出:
A unique_b unique_c
a 1 2
b 1 1
c 1 1
我尝试了以下内容:
gb_a['B','C'].agg({'B':pd.Series.nunique, 'C':pd.Series.nunique})
gb_a['B','C'].agg({'unique_b':pd.Series.nunique, 'unique_c':pd.Series.nunique})
gb_a['B','C'].agg({'B': {'unique_b':pd.Series.nunique}, 'C': {'unique_c':pd.Series.nunique}})
我收到错误:
KeyError: ('B', 'C')
问题
是否可以在上述技术中修复它?
我知道我可以单独进行,然后合并如下:
out_df=gb_a['B'].agg({'unique_b':pd.Series.nunique})
out_df= pd.merge(out_df,gb_a['C'].agg({'unique_c':pd.Series.nunique}), on='A', how='inner')
但我应该对选定的列(很多列)进行不同的聚合。不想在大数据上多次合并。
我正在使用Python 2.7
感谢。
P.S。我已经阅读过类似主题的不同答案。例如
答案 0 :(得分:0)
每the docs, SeriesGroupBy对象具有nunique方法。因此,您可以使用
汇总gb_a
gb_a.agg({'B': 'nunique', 'C': 'nunique'})
import pandas as pd
df = pd.DataFrame({'A': ['a', 'a', 'b', 'c'], 'B': ['x', 'x', 'x', 'x'], 'C': [
'1', '2', '3', '4'], 'D': [0, 0, 0, 0]})
gb_a = df.groupby(['A'], as_index=False)
result = gb_a.agg({'B': 'nunique', 'C': 'nunique'})
result = result.rename(columns={'B':'unique_b', 'C':'unique_c'})
print(result)
打印
A unique_c unique_b
0 a 2 1
1 b 1 1
2 c 1 1