python - 将函数应用于每 n 行 pandas

标签 python pandas

我有一个 pandas 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

最佳答案

每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

关于python - 将函数应用于每 n 行 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54557262/

相关文章:

python - 根据列名称值对 pandas 中的数据框进行子集化

javascript - 使用 javascript 或 jquery 在 session 中存储 Flask 数据

python - Pandas 合并 : merge two dataframes on same column but keep different columns

python - 在 python 中高级处理多个数据帧

python - 将变量分配给整个 iterable,同时在 for 循环中执行 Iterable 解包

python - 通过后台线程访问 Tkinter 的文本小部件会导致崩溃

python - 计算前一行中大于当前行值的值

Pandas :最近的合并

python - 来自嵌套在 json 中的列表的 Pandas Dataframe

python - 在 DataFrame 上应用函数后更改 Series