我有一个熊猫df col,它看起来像这样:
0 0.286
1 0.240
2 0.335
3 0.397
2430 38.580
2431 38.650
2432 38.630
2433 38.170
6007 72.960
6008 71.250
6009 70.370
6010 70.460 ...
我想输出一个new_col
,其初始值的百分比变化,重置每个第四个值,然后输出最终的4行输出,该行取new_col
中每个第四个值的平均值。
预期输出new_col
:
0.00
-16.08
17.13
38.81
0.00
0.18
0.13
-1.06
0.00
-2.34
-3.55
-3.43
avg_col
0.00
-6.08
4.57
11.44
答案 0 :(得分:2)
您可以通过每4行分组来获得new_col
:
df['new_col'] = df.groupby(df.index//4)[1].apply(lambda x: (x-x.iloc[0])/x.iloc[0]*100).reset_index(0, drop=True)
或者避免进行.groupby.apply
变换然后进行计算(对于大帧,可能会更快)
df['new_col'] = df.groupby(df.index//4)[1].transform('first')
df['new_col'] = (df[1] - df.new_col)/df.new_col*100
df
: 0 1 new_col
0 0 0.286 0.000000
1 1 0.240 -16.083916
2 2 0.335 17.132867
3 3 0.397 38.811189
4 2430 38.580 0.000000
5 2431 38.650 0.181441
6 2432 38.630 0.129601
7 2433 38.170 -1.062727
8 6007 72.960 0.000000
9 6008 71.250 -2.343750
10 6009 70.370 -3.549890
11 6010 70.460 -3.426535
通过除法余数分组获得平均值:
df.groupby(df.index%4).new_col.mean()
0 0.000000
1 -6.082075
2 4.570859
3 11.440642
Name: new_col, dtype: float64