Pandas 如何根据新列中的唯一ID查找一组值的平均值?

Pandas 如何根据新列中的唯一ID查找一组值的平均值?,pandas,Pandas,我想创建一个新列“DataMean”,该列查找“Data”列中按ID分组的一组值的平均值。这是我当前拥有的数据帧: ID Data 0 NaN 0 NaN 0 NaN 0 NaN 1 34 1 36 0 NaN 0 NaN 2 12 0 NaN 0 NaN 3 23 3 16 0 NaN 0 NaN 4 23 4 11 4 2 4 8 我希望我的最终输出如下所示。如果数据值中没有NaN,则不应计算平均值,如果重复ID

我想创建一个新列“DataMean”,该列查找“Data”列中按ID分组的一组值的平均值。这是我当前拥有的数据帧:

ID  Data
0   NaN
0   NaN
0   NaN
0   NaN
1   34
1   36
0   NaN
0   NaN
2   12
0   NaN
0   NaN
3   23
3   16
0   NaN
0   NaN
4   23
4   11
4   2
4   8
我希望我的最终输出如下所示。如果数据值中没有NaN,则不应计算平均值,如果重复ID,则仅应显示一次平均值。有谁能指导我如何以这种方式显示输出

ID Data MeanData
0   NaN NaN
0   NaN NaN
0   NaN NaN
0   NaN NaN
1   34  35
1   36  NaN
0   NaN NaN
0   NaN NaN
2   12  12
0   NaN NaN
0   NaN NaN
3   23  19.5
3   16  NaN
0   NaN NaN
0   NaN NaN
4   23  11
4   11  NaN
4   2   NaN
4   8   NaN

这和你的另一个有点相似。使用相同的分组,但计算平均值并指定不重复的位置:

s = df.Data.isnull().cumsum().where(df.Data.notnull())
df['MeanData'] = df.groupby(s).Data.transform('mean').where(~df.ID.duplicated())
输出
df
: 使用

    ID  Data  MeanData
0    0   NaN       NaN
1    0   NaN       NaN
2    0   NaN       NaN
3    0   NaN       NaN
4    1  34.0      35.0
5    1  36.0       NaN
6    0   NaN       NaN
7    0   NaN       NaN
8    2  12.0      12.0
9    0   NaN       NaN
10   0   NaN       NaN
11   3  23.0      19.5
12   3  16.0       NaN
13   0   NaN       NaN
14   0   NaN       NaN
15   4  23.0      11.0
16   4  11.0       NaN
17   4   2.0       NaN
18   4   8.0       NaN
df.loc[df.groupby('ID').head(1).index,'MeanData']=df.groupby('ID').Data.transform('mean')
df
    ID  Data  MeanData
0    0   NaN       NaN
1    0   NaN       NaN
2    0   NaN       NaN
3    0   NaN       NaN
4    1  34.0      35.0
5    1  36.0       NaN
6    0   NaN       NaN
7    0   NaN       NaN
8    2  12.0      12.0
9    0   NaN       NaN
10   0   NaN       NaN
11   3  23.0      19.5
12   3  16.0       NaN
13   0   NaN       NaN
14   0   NaN       NaN
15   4  23.0      11.0
16   4  11.0       NaN
17   4   2.0       NaN
18   4   8.0       NaN