Pandas 如何根据新列中的唯一ID查找一组值的平均值?
我想创建一个新列“DataMean”,该列查找“Data”列中按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
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