【问题标题】:Sum if column name is higher than row value如果列名高于行值,则求和
【发布时间】:2022-01-20 21:13:27
【问题描述】:

如果下面每一列的“日期”值低于列名的值,我会尝试对每一列的行值求和:

  01-01-2020     01-01-2021     01-01-2022           date
1          1              3              6     01-01-2020
2          4              4              2     01-10-2021
3          5              1              9     01-12-2021

例如对于第 1 列,日期值等于或小于第 1 列名称 (01-01-2020) 的唯一行是第一行,因此第 1 列的总和为 1。

同样,由于“日期”列中的所有日期都低于最后一列的名称 (01-01-2022),因此总数为 6+2+9=17,这将导致:

      01-01-2020     01-01-2021     01-01-2022           date
1              1              3              6     01-01-2020
2              4              4              2     01-10-2021
3              5              1              9     01-12-2021
Total          1              3             17

有没有比遍历每一列然后每一行更优雅的方法?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我们可以检查np.greater_equal.outer,然后将列掩码分割为布尔输出为NaN的不需要的单元格

    s = pd.to_datetime(df.date).values
    m = np.greater_equal.outer(pd.to_datetime(df.columns[:-1]).values,s).T
    df = df.append(df.iloc[:,:-1].where(m).sum().to_frame('Total').T)
    df
    Out[381]: 
           01-01-2020  01-01-2021  01-01-2022        date
    1             1.0         3.0         6.0  01-01-2020
    2             4.0         4.0         2.0  01-10-2021
    3             5.0         1.0         9.0  01-12-2021
    Total         1.0         3.0        17.0         NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2021-11-28
      相关资源
      最近更新 更多