Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 遍历数据帧连续列_Python_Pandas - Fatal编程技术网

Python 遍历数据帧连续列

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

我试图在pandas中创建一个循环,以计算连续列之间的差异,并在新列中给出输出:

原始df:

**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确保只计算继续输入