如何动态创建列名?当我们分组并对多列求和时?

Sam*_*Sam 4 python dataframe pandas

我正在尝试动态创建一个添加了一些后缀的列名。我可以在 for 循环中完成,但我认为它会效率低下。有没有办法动态地做到这一点。

from pandas import Timestamp
import pandas as pd
df = pd.DataFrame({'B': range(1,6),'A':['A','A','A','B','B'],'D':[2,3,4,5,6]})

df['C'] = [Timestamp('20130101 09:00:00'),
Timestamp('20130101 09:00:02'),
Timestamp('20130102 09:00:03'),
Timestamp('20130101 09:00:05'),
Timestamp('20130101 09:00:06')]
Run Code Online (Sandbox Code Playgroud)

我可以分多个步骤完成,例如:

df['D_2days']=df.groupby('A').rolling('4d',on='C')['D'].sum().values
df['B_2days']=df.groupby('A').rolling('4d',on='C')['B'].sum().values
Run Code Online (Sandbox Code Playgroud)

有没有办法一次性完成。我有 1000 多列需要求和,循环可能不是一个好主意。

谢谢你,山姆

Shu*_*rma 6

我们可以通过传递要计算滚动总和的列名列表,对多列进行分组和计算滚动总和,然后在添加所需前缀后将计算出的滚动总和分配给数据帧内的列

c = pd.Index(['B', 'D'])
df[c + '_2days'] = df.groupby('A', sort=False).rolling('4d',on='C')[c].sum().values
Run Code Online (Sandbox Code Playgroud)
   B  A  D                   C  B_2days  D_2days
0  1  A  2 2013-01-01 09:00:00      1.0      2.0
1  2  A  3 2013-01-01 09:00:02      3.0      5.0
2  3  A  4 2013-01-02 09:00:03      6.0      9.0
3  4  B  5 2013-01-01 09:00:05      4.0      5.0
4  5  B  6 2013-01-01 09:00:06      9.0     11.0
Run Code Online (Sandbox Code Playgroud)