根据另一个数据帧中的相应元素对数据帧中的每个元素执行数值运算

时间:2019-04-06 19:12:03

标签: pandas dataframe

我有一个以列名['0','1','2','3']创建的熊猫数据框。该数据框的元素是数值。我们称之为“ df_1”

现在,我需要创建另一个数据框(例如df_2),其索引和列名称与df_1相同。

元素df_2如下:

  1. 每当列名称为“ 0”时,其下的所有行都将标记为0。
  2. 对于df_2中的任何其他列,它的row元素将是df_1中相应行元素与当前列之前该列下存在的行元素之和

  

df_2 [i,j] = df_1 [i,j] + df_1 [i,j-1],只要当前列名不是'0'

     

df_2 [i,j] = 0,只要当前列名称为'0'

我已经为该操作编写了python代码,并且工作正常。但是,采用的方法效率不高,而且非常复杂。

请让我知道是否有更好的方法来执行相同的操作

import pandas
df_1=pandas.DataFrame([[0,10,20,30],[0,40,50,60],[0,70,80,90]],columns=['0','1','2','3'])

df_2=pandas.DataFrame(0,index=df_1.index,columns=df_1.columns)

for j in list(df_1.columns):
    idx=list(df_1.columns).index(j)
    for i in range(len(df_1.index)):
        if j!='0':
            df_2.iloc[i,idx]=df_1.iloc[i,idx-1]+df_1.iloc[i,idx]                       

1 个答案:

答案 0 :(得分:0)

首先将列向右移动一个,然后添加到原始列,使其等于df_2。

df_2 = df_1 + df_1.shift(1, axis=1)

过滤列'0'的列,然后使其等于ot 0。

df_2['0'] = 0

在此操作过程中,熊猫将转换为float,如果需要,可转换回int。

df_2.astype('int32')