Python 遍历数据帧连续列
我试图在pandas中创建一个循环,以计算连续列之间的差异,并在新列中给出输出: 原始df:Python 遍历数据帧连续列,python,pandas,Python,Pandas,我试图在pandas中创建一个循环,以计算连续列之间的差异,并在新列中给出输出: 原始df: **201601** **201602** **201603** 100 200 500 期望输出 **201601** **201602** **201603** **201602_201601** **201603_02** 100 200 500 100 300 我的代码是从stac
**201601** **201602** **201603**
100 200 500
期望输出
**201601** **201602** **201603** **201602_201601** **201603_02**
100 200 500 100 300
我的代码是从stackoverflow post([)中修改的:
但是,我得到的输出如下:
**201601** **201602** **201603** **201602_201601** **201603_201601** **201603_201602**
100 200 500 100 400 300
我已经使用了pd.diff来做我需要的事情,但是无法理解for循环代码。任何帮助都将不胜感激
感谢使用
diff
和zip
的简单列表理解来构造列的名称
cols = [f'{b}_{a}' for (a,b) in zip(df.columns, df.columns[1:])]
df[cols] = df.diff(axis=1).dropna(axis=1)
201601 201602 201603 201602_201601 201603_201602
0 100 200 500 100 300
当使用pandas时,避免在任何时候使用
for
循环,使用diff
和简单列表理解与zip
来构造列的名称
cols = [f'{b}_{a}' for (a,b) in zip(df.columns, df.columns[1:])]
df[cols] = df.diff(axis=1).dropna(axis=1)
201601 201602 201603 201602_201601 201603_201602
0 100 200 500 100 300
在使用pandas时,避免在任何时候使用
for
循环这只是修复您的代码
col=df.columns
for x,i in enumerate(col):
for y,j in enumerate(col):
if y-x==1 and i!=j:
bina = df[i]-df[j]
df['MOM_' + str(j) + '_' + str(i)] = bina
df.columns
Out[1210]:
Index(['**201601**', '**201602**', '**201603**', 'MOM_**201602**_**201601**',
'MOM_**201603**_**201602**'],
dtype='object')
这只是修复你的代码
col=df.columns
for x,i in enumerate(col):
for y,j in enumerate(col):
if y-x==1 and i!=j:
bina = df[i]-df[j]
df['MOM_' + str(j) + '_' + str(i)] = bina
df.columns
Out[1210]:
Index(['**201601**', '**201602**', '**201603**', 'MOM_**201602**_**201601**',
'MOM_**201603**_**201602**'],
dtype='object')
for
循环与您可能想要的方向相反。如果您想要迭代数据帧,那么您可能根本不想要数据帧。您应该尝试寻找向量化方法for
循环与您可能想要的方向相反。如果您想要迭代数据帧taframe那么你可能根本不想拥有数据帧。你应该尝试寻找矢量化方法。我承认你是第一个。我承认你是第一个。感谢W-B的及时响应。代码经过轻微修改后对我有效。但是,你能详细说明在检查“y-x”时代码在做什么吗==1.@vagautam确保只计算继续输入感谢W-B的提示响应。代码经过轻微修改后对我有效。但是,当检查“y-x”==1时,请详细说明代码的作用。@vagautam确保只计算继续输入