用熊猫日期框架操作

时间:2017-11-05 13:46:13

标签: python pandas lambda

我在这个问题上要做的是使用以下日期框架:

product  NEG_00_04  NEG_04_08  NEG_08_12  NEG_12_16  NEG_16_20  NEG_20_24  \
datum_von                                                                       
2017-10-21    0.703110   0.518214   0.956835   2.292035   0.179191   0.120000   
2017-10-22    0.421140   0.246904   0.680147   0.830645   0.647059   0.484848   
2017-10-23    0.222753   0.240493   0.298851   0.293651   0.291667   0.205882  

如果这些数字高于0.5,则保持相同并乘以另一个日期框架(下方)中的对应方但如果该值低于0.5,则应从1减去上述对应值,然后也只将相应的值乘以日期框(下图)。

这是用于使用上面的过滤日期框架进行乘法过程的日期框架

productname  NEG_00_04  NEG_04_08  NEG_08_12  NEG_12_16  NEG_16_20  NEG_20_24  \
datum_von                                                                       
2017-10-21       10.61       8.51       1.39       2.26       1.73       1.50   
2017-10-22       18.07      12.92       2.72       7.44       2.04       1.32   
2017-10-23       10.46       9.73       0.87       1.26       0.72       0.68 

我确信在python中有一种简单的方法可以做到这一点,我还是不高兴。提前谢谢!

2 个答案:

答案 0 :(得分:3)

使用df.where替换值,连续并通过对相似列进行分组来对它们进行分组。

ndf = df2.where(df1>0.5,df2+1)

x = pd.concat([ndf,df1],1)
new = x.groupby(by=x.columns,axis=1).apply(lambda x: x.iloc[:,0]*x.iloc[:,1])
       NEG_00_04  NEG_04_08  NEG_08_12  NEG_12_16  NEG_16_20  NEG_20_24
datum_von                                                                   
2017-10-21   7.459997   4.410001   1.330001   5.179999   0.489191   0.300000
2017-10-22   8.031140   3.436904   1.850000   6.179999   1.320000   1.124847
2017-10-23   2.552749   2.580490   0.558851   0.663651   0.501667   0.345882

答案 1 :(得分:2)

我的猜测是你正在寻找np.where

np.where(df1 < 0.5, df2 + 1, df2) * df1

            NEG_00_04  NEG_04_08  NEG_08_12  NEG_12_16  NEG_16_20  NEG_20_24
2017-10-21   7.459997   4.410001   1.330001   5.179999   0.489191   0.300000
2017-10-22   8.031140   3.436904   1.850000   6.179999   1.320000   1.124847
2017-10-23   2.552749   2.580490   0.558851   0.663651   0.501667   0.345882