熊猫中的移位和乘法

时间:2020-02-06 18:52:32

标签: python pandas

我有一个熊猫数据框,看起来像这样:

      Year  Ship    Age Surviving   UEC
      2018  12.88   13    0.00     17.2
      2019  12.57   12    0.02     17.2
      2020  12.24   11    0.06     17.2
      2021  11.95   10    0.18     17.2
      2022  11.77   9     0.37     17.2
      2023  11.70   8     0.60     17.2
      2024  11.75   7     0.81     17.2
      2025  11.93   6     0.94     17.2
      2026  12.12   5     0.99     0.3
      2027  12.34   4     1.00     0.3
      2028  12.56   3     NaN      0.3
      2029  12.76   2     NaN      0.3
      2030  12.93   1     NaN      0.3

我想通过每次将所有列下移1来乘以Ship,Surviving和UEC列,因此输出df2应该如下所示:

     df2
                       Stock_uec
      0      df1.iloc[:10,1]*df1.iloc[:10,3]*df1.iloc[:10,4]
      1      df1.iloc[1:11,1]*df1.iloc[1:11,3]*df1.iloc[1:11,4]
      3      df1.iloc[2:12,1]*df1.iloc[2:12,3]*df1.iloc[2:12,4]

下面是我的代码,但是没有得到预期的结果。

        for i, row in df1.iterrows():

             out=df1.iloc[i:i+10,1].shift(1,axis=0)*df1.iloc[i:i+10,3].shift(1,       
                  axis=0)*df1.iloc[i:i+10,4].shift(1, axis=0)

        print(out)

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

IIUC,我想你要

df.loc[:,'shipping_utc'] = 0
for i in range(df.shape[0]):

    df.loc[i:,'shipping_utc'] = df.iloc[i:][['Ship','Surviving','UEC']].prod(axis=1) + df.loc[i:,'shipping_utc']

输出

df
Out[25]: 
    Year   Ship  Age  Surviving   UEC  shipping_utc
0   2018  12.88   13       0.00  17.2       0.00000
1   2019  12.57   12       0.02  17.2       8.64816
2   2020  12.24   11       0.06  17.2      37.89504
3   2021  11.95   10       0.18  17.2     147.98880
4   2022  11.77    9       0.37  17.2     374.52140
5   2023  11.70    8       0.60  17.2     724.46400
6   2024  11.75    7       0.81  17.2    1145.90700
7   2025  11.93    6       0.94  17.2    1543.07392
8   2026  12.12    5       0.99   0.3      32.39676
9   2027  12.34    4       1.00   0.3      37.02000
10  2028  12.56    3        NaN   0.3      41.44800
11  2029  12.76    2        NaN   0.3      45.93600
12  2030  12.93    1        NaN   0.3      50.42700
相关问题