遍历熊猫数据帧连续的列

时间:2018-12-07 18:16:57

标签: python pandas

我正在尝试在熊猫中创建一个循环以计算连续列之间的差异,并在新列中提供输出:

原始df:

**201601** **201602** **201603**  **201602_201601** **201603_02**
100           200         500         100          300

所需的输出

for i in df.iloc[:,2:5]:
  for j in df.iloc[:,2:5]:
    if i == j:
        break
    else:
        bina = df[i]-df[j]
        df['MOM_' + str(j) + '_' + str(i)] = bina
df.head()

我的代码是我从stackoverflow帖子([add columns to a data frame calculated by for loops in python)修改的:

**201601** **201602** **201603**  **201602_201601** **201603_201601** **201603_201602**
100           200         500         100          400   300

但是,我得到的输出如下:

<ul class="navbar-nav ml-auto">
      <li class="nav-item dropdown" [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}">
        <!--Not sure about path of [routerLink]="['/login']" **make sure to check** -->
        <a class="nav-link dropdown-toggle" [routerLink]="['/login']" data-toggle="dropdown" aria-haspopup="true"
          aria-expanded="false">
          {{userName}}
        </a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
          <!--
              <a class="dropdown-item text-uppercase" href="">Profile</a>
              <a class="dropdown-item text-uppercase" href="">Settings</a>
          -->
          <a class="dropdown-item">Logout</a>
        </div>
      </li>
</ul>

我已经使用pd.diff来完成我需要的操作,但无法找出for循环代码。任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:2)

使用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

在使用熊猫时,请始终避免使用for循环

答案 1 :(得分:1)

这只是解决您的代码

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')