返回 pandas 中 groupby 后的所有行(即不要返回分组键唯一值所对应的行数目减少后的数据)。

3
以下是来自教程的代码,产生以下结果:
代码:
import pandas as pd
import numpy as np

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
                    'foo', 'bar', 'foo', 'foo'],
                    'B' : ['one', 'one', 'two', 'three',
                    'two', 'two', 'one', 'three'],
                    'C' : np.random.randn(8),
                    'D' : np.random.randn(8)})

print(df)

grouped = df.groupby('A').mean()
print(grouped)

结果:

     A      B         C         D
0  foo    one -0.787410 -0.857863
1  bar    one  0.140572  1.330183
2  foo    two -0.770166  2.123528
3  bar  three -0.965523  0.771663
4  foo    two  0.215037 -0.597935
5  bar    two -1.023839 -0.248445
6  foo    one -1.377515  2.041921
7  foo  three -0.314333  1.379423
            C         D
A                      
bar -0.616263  0.617800
foo -0.606877  0.817815

然而我想看到所有行,如下所示:
0   foo one   -0.606877   0.817815
1   bar one   -0.616263   0.617800
2   foo two   -0.606877   0.817815
3   bar three -0.616263   0.617800
4   foo two   -0.606877   0.817815
5   bar two   -0.616263   0.617800
6   foo one   -0.606877   0.817815
7   foo three -0.606877   0.817815

我可以使用任何其他库。我只需要使用Python3快速高效地完成这项任务。
提前感谢。
2个回答

4

使用 GroupBy.transform 指定列:

cols = ['C','D']
df[cols] = df.groupby('A')[cols].transform('mean')
print(df)
     A      B         C         D
0  foo    one  0.444616 -0.232363
1  bar    one  0.173897 -0.603437
2  foo    two  0.444616 -0.232363
3  bar  three  0.173897 -0.603437
4  foo    two  0.444616 -0.232363
5  bar    two  0.173897 -0.603437
6  foo    one  0.444616 -0.232363
7  foo  three  0.444616 -0.232363

0

你也可以使用apply。对每个组执行操作,但返回该组的所有行。

def my_func(x):
    x["D"] = x.C.mean()
    return x
grouped = df.groupby('A', as_index=False).apply(my_func)
print(grouped)

谢谢。也可以正常工作。 - Uğur Dinç

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接