根据两个条件求平均值;根据这些平均值创建列

我有一个包含天气报告数据的df。它具有超过200万行和以下列。

ID  MONTH  TEMP   
1   1      0      
1   1      10     

2   1      50     
2   1      60     

3   1      80    
3   1      90     

1   2      0      
1   2      10     

2   2      50     
2   2      60     

3   2      80     
3   2      90     

我希望为平均每月温度创建一列。我需要比for循环更快的方法。每月平均温度的值来自TEMP列。我希望它们针对每个MONTH的每个ID。

ID  MONTH  TEMP   AVE MONTHLY TEMP
1   1      0      5
1   1      10     5

2   1      50     55
2   1      60     55

3   1      80     85
3   1      90     85

1   2      0      5
1   2      10     5

2   2      50     55
2   2      60     55

3   2      80     85
3   2      90     85
FY12325 回答:根据两个条件求平均值;根据这些平均值创建列

使用groupby.transform

df['AVE MONTHLY TEMP']=df.groupby(['ID','MONTH'])['TEMP'].transform('mean')
print(df)

输出

    ID  MONTH  TEMP  AVE MONTHLY TEMP
0    1      1     0                 5
1    1      1    10                 5
2    2      1    50                55
3    2      1    60                55
4    3      1    80                85
5    3      1    90                85
6    1      2     0                 5
7    1      2    10                 5
8    2      2    50                55
9    2      2    60                55
10   3      2    80                85
11   3      2    90                85
,

我认为,如果您有数百万行数据,因为这些分组可能会重复(ID,MONTH),则此解决方案可能会更好。这假定ID系列始终按数据中的分组进行分组。我正在尝试开箱即用,因为您说您有一百万行数据:

df['AVG MONTHLY TEMP'] = df.groupby(df['ID'].ne(df['ID'].shift()).cumsum(),as_index=False)['TEMP'].transform('mean') 

此外,如果您将平均温度分组为 ALWAYS ,您也可以执行以下公式:

df.groupby(np.arange(len(df))//2)['TEMP'].transform('mean')

输出:

    ID  MONTH  TEMP  AVG MONTHLY TEMP
0    1      1     0                 5
1    1      1    10                 5
2    2      1    50                55
3    2      1    60                55
4    3      1    80                85
5    3      1    90                85
6    1      2     0                 5
7    1      2    10                 5
8    2      2    50                55
9    2      2    60                55
10   3      2    80                85
11   3      2    90                85

我希望这种帮助或提出想法,因为一百万行数据是很多数据

本文链接:https://www.f2er.com/2946889.html

大家都在问