我试图在文档here中关注groupby的示例。根据示例,我首先创建一个数据框:
df = pd.DataFrame({'A': 'a a b'.split(), 'B': [1,2,3], 'C': [4,6, 5]})
现在,让我们分组标记为" A"并通过其值来总结另外两个:
df.groupby('A').sum()
这是合理的事情,按照" A"和生产:
B C
A
a 3 10
b 3 5
现在,让我们尝试相同的事情,但明确定义sum()函数:
df.groupby('A', group_keys=False).apply(lambda x: np.sum(x))
由于一些莫名其妙的原因,这也决定将该功能应用于" A"的条目。柱。当然,其他数字函数(如square)会抛出错误,因为它们应用于字符串。实际上,它会导致上面链接中提供的示例无效。
A B C
A
a aa 3 10
b b 3 5
我尝试了python 2.7和3.6,结果相同。 如何让它做智能的事情,而不是将函数应用到我正在分组的列?
答案 0 :(得分:1)
除了groupby.apply
中的组变量之外,apply
除了删除组变量之外,可能还没有智能的方法:
df.groupby('A').apply(lambda g: g.drop('A', 1).sum())
# B C
#A
#a 3 10
#b 3 5
答案 1 :(得分:1)
您还可以指定要选择的列。
df.groupby('A')["B", "C"].apply(lambda x: np.sum(x))
B C
A
a 3 10
b 3 5