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 多列需要求和,循环可能不是一个好主意。
谢谢你,山姆
我们可以通过传递要计算滚动总和的列名列表,对多列进行分组和计算滚动总和,然后在添加所需前缀后将计算出的滚动总和分配给数据帧内的列
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)