在 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()
Run Code Online (Sandbox Code Playgroud)
将返回
A
1 2
6 1
Name: C, dtype: int64
Run Code Online (Sandbox Code Playgroud)
我还想B在分组时计算索引级别中的不同值A。我无法找到一个干净的方式来访问的级别B从groupby对象。我能想到的最好的是:
ex.reset_index("B", drop=False).groupby(level="A").B.nunique()
Run Code Online (Sandbox Code Playgroud)
正确返回:
A
1 2
6 1
Name: B, dtype: int64
Run Code Online (Sandbox Code Playgroud)
有没有办法让我在不重置索引或使用apply函数的情况下在 groupby 上执行此操作?
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
Run Code Online (Sandbox Code Playgroud)
与以下相同的解决方案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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7621 次 |
| 最近记录: |