在Pandas中,有一种非常简洁的方法可以按操作计算组内列中的不同值.例如
ex = pd.DataFrame([[1, 2, 3], [6, 7, 8], [1, 7, 9]],
columns=["A", "B", "C"]).set_index(["A", "B"])
ex.groupby(level="A").C.nunique()
将返回
A
1 2
6 1
Name: C, dtype: int64
我还想计算索引级别B中的不同值,同时按A进行分组.我找不到从groupby对象访问B级别的简洁方法.我能想到的最好的是:
ex.reset_index("B", drop=False).groupby(level="A").B.nunique()
正确返回:
A
1 2
6 1
Name: B, dtype: int64
有没有办法让我在groupby上执行此操作而不重置索引或使用apply函数?
解决方法:
IIUC你可以为所有级别执行reset_index,然后groupby为’A’并应用nunique方法:
res = ex.reset_index().groupby('A').agg(lambda x: x.nunique())
In [339]: res
Out[339]:
B C
A
1 2 2
6 1 1
与pivot_table相同的解决方案:
In [341]: ex.reset_index().pivot_table(index='A', aggfunc=lambda x: x.nunique())
Out[341]:
B C
A
1 2 2
6 1 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。