【问题标题】:perform numerical operation over each element in data frame based on corresponding elements in another data frame基于另一个数据帧中的对应元素对数据帧中的每个元素执行数值运算
【发布时间】:2019-08-28 08:54:39
【问题描述】:

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

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

元素 df_2 是这样的:

  1. 只要列名是'0',它下面的所有行都将被标记为0。
  2. 对于 df_2 中的任何其他列,其行元素将是 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]                       

【问题讨论】:

    标签: pandas dataframe


    【解决方案1】:

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

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

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

    df_2['0'] = 0
    

    Pandas 将在此操作期间转换为 float,如果您愿意,可以转换回 int。

    df_2.astype('int32')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 2014-06-18
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多