【问题标题】:Add the values of several columns when the number of columns exceeds 3 - Pandas当列数超过 3 时添加几列的值 - Pandas
【发布时间】:2021-06-17 11:59:28
【问题描述】:

我有一个 pandas 数据框,其中包含几列日期、数字和账单金额。我想将其他发票的金额与第三张相加,并将发票编号更改为“1111”。 这是一个例子:

ID customer Bill1 Date 1 ID Bill 1 Bill2 Date 2 ID Bill 2 Bill3 Date3 ID Bill 3 Bill4 Date 4 ID Bill 4 Bill5 Date 5 ID Bill 5
4 6 2000-10-04 1 45 2000-11-05 2 51 1999-12-05 3 23 2001-11-23 6 76 2011-08-19 12
6 8 2016-05-03 7 39 2017-08-09 8 38 2018-07-14 17 21 2009-05-04 9 Nan Nan Nan
12 14 2016-11-16 10 73 2017-05-04 15 Nan Nan Nan Nan Nan Nan Nan Nan Nan

我想得到这个:

ID customer Bill1 Date 1 ID Bill 1 Bill2 Date 2 ID Bill 2 Bill3 Date3 ID Bill 3
4 6 2000-10-04 1 45 2000-11-05 2 150 1999-12-05 1111
6 8 2016-05-03 7 39 2017-08-09 8 59 2018-07-14 1111
12 14 2016-11-16 10 73 2017-05-04 15 Nan Nan Nan

这个例子是我的数据样本,我可能有超过 5 列。 感谢您的帮助

【问题讨论】:

  • 逻辑是什么?你在哪里添加?我看到的只是 1111 代替了之前 ID Bill 3 的值!!你能解释一下吗

标签: python pandas


【解决方案1】:

通过一点数据操作,您应该能够做到:

df = df.replace('Nan', np.nan)
idx_col_bill3 = 7
step = 3
idx_col_bill3_id = 10
cols = df.columns

bills = df[cols[range(idx_col_bill3,len(cols), step)]].sum(axis=1)
bills.replace(0, nan, inplace=True)
df = df[cols[range(idx_col_bill3_id)]]
df['Bill3'] = bills
df['ID Bill 3'].iloc._setitem_with_indexer(df['ID Bill 3'].notna(),1111)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多