【问题标题】:How to multiply one column on another column by values on the first day of the month如何将另一列的一列乘以该月第一天的值
【发布时间】:2019-03-11 17:17:46
【问题描述】:

我想将“A”列中的值乘以“B”列中当月第一天的值,因此在 1/2017 中,BTC 为 0.27,ETH 为 0.83。 2017 年 2 月,BTC 为 0.16,ETH 为 0.88。

我有以下数据框:

Date'       Symbol' A'  B'    'C'
1/1/2017     BTC    22  0.27  5.94
             ETH    21  0.83  17.43
1/2/2017     BTC    23  0.26  6.21
             ETH    24  0.88  19.02
1/3/2017     BTC    25  0.28  6.75
             ETH    21  0.84  17.43
1/4/2017     BTC    24  0.22  6.48
             ETH    23  0.83  19.09
...         ... ...

1/30/2017    BTC    25  0.46  6.75
             ETH    23  0.98  19.09         
1/31/2017    BTC    12  0.27  3.24
             ETH    11  0.73  9.13
2/1/2017     BTC    43  0.16  6.88
             ETH    32  0.88  28.16     
2/2/2017     BTC    24  0.26  3.84
             ETH    21  0.55  18.48

“C”列是预期的输出。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    首先在MultiIndex的第一级创建DatetimeIndex:

    lvl0 = pd.to_datetime(df.index.get_level_values(0), format='%m/%d/%Y')
    lvl1 = df.index.get_level_values(1)
    
    df.index = [lvl0, lvl1]
    

    然后使用DatetimeIndex.to_period 和GroupBy.transform 和函数first 用于与原始DataFrame 大小相同的系列,因此可能有多个值:

    first = df['B'].groupby([df.index.get_level_values(0).to_period('m'), lvl1]).transform('first')
    
    df['C'] = df['A'] * first
    

    print (df)
                        A     B      C
    Date       Symbol                 
    2017-01-01 BTC     22  0.27   5.94
               ETH     21  0.83  17.43
    2017-01-02 BTC     23  0.26   6.21
               ETH     24  0.88  19.92
    2017-01-03 BTC     25  0.28   6.75
               ETH     21  0.84  17.43
    2017-01-04 BTC     24  0.22   6.48
               ETH     23  0.83  19.09
    ...
    2017-01-30 BTC     25  0.46   6.75
               ETH     23  0.98  19.09
    2017-01-31 BTC     12  0.27   3.24
               ETH     11  0.73   9.13
    2017-02-01 BTC     43  0.16   6.88
               ETH     21  0.88  18.48
    2017-02-02 BTC     24  0.26   3.84
               ETH     21  0.88  18.48
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多