【发布时间】:2021-03-29 12:31:59
【问题描述】:
我想使用动态范围创建一个附加列,其中包含基于 A 列的平均值。
import numpy as np
import pandas as pd
test = {'A' : [100, 120, 70, 300, 190, 70, 300, 190, 70],
'B' : [80, 50, 64, 288, 172, 64, 288, 172, 64],
'C' : ['NO', 'NO', 'YES', 'NO', 'YES', 'YES', 'NO', 'YES', 'YES'],
'D' : [0, 1, 0, 3, 2, 2, 3, 1, 4] }
df = pd.DataFrame(data=test)
A B C D
0 100 80 NO 0
1 120 50 NO 1
2 70 64 YES 0
3 300 288 NO 3
4 190 172 YES 2
5 70 64 YES 2
6 300 288 NO 3
7 190 172 YES 1
8 70 64 YES 4
当C 列中的项目为YES 时,将D 列中的值作为起始行索引,将当前行-1 的行索引作为最高行索引,从A 列中的动态范围中获取平均值.
下面是我想要达到的结果。
A B C D Dyn_Ave
0 100 80 NO 0 NaN
1 120 50 NO 1 NaN
2 70 64 YES 0 110
3 300 288 NO 3 NaN
4 190 172 YES 2 185
5 70 64 YES 2 187
6 300 288 NO 3 NaN
7 190 172 YES 1 175
8 70 64 YES 4 188
我在创建列时尝试使用 np.where 方法,尽管我遇到了以下错误 - TypeError: Cannot index by location index with a non-integer key
df['Dyn_Ave'] = np.where(df['C'] == 'YES', df['A'].iloc[df['D']:df.loc['C'][-1]].mean(), np.nan)
【问题讨论】:
标签: python pandas dataframe mean