首页 > 解决方案 > Pandas:有没有办法根据条件匹配在数据框中添加特定列

问题描述

我有从一月到十二月的专栏,根据当前月份,我必须得到月份的总和。例如:如果当前月份是四月,我的代码应该添加从一月到四月的所有列并忽略所有其他列。

原表:

| Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec |   |
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|---|
| 2   | 3   | 4   | 5   | 6   | 7   | 8   | 9   | 12  | 1   | 3   | 5   |   |
| 1   | 23  | 4   | 5   | 76  | 7   | 423 | 57  | 689 | 345 | 23  | 2   |   |

我有过去 3 年包含多个列的庞大数据集,比如说 2015 年、2016 年、2017 年。每年我都有如下列:Jan'、'Feb'、'Mar' 等等。

我需要分别获得每一年每一列的总和。所以我列了清单,然后我把它们加起来。但是这种方法太冗长了。

我还尝试将其他列(在此示例中为 5 月至 12 月)中的值设置为零,以便仅添加 1 月至 4 月。这种方法也行得通,但它涉及大量代码和太多的手动错误空间,以防将来需要进行任何新的修改。


list_2015 = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']

df1['2015_Dec_YTD'] = df1.loc[:,list_2015].sum(axis=1)

如果我以这种方式创建,它可以正常工作,但是代码变得太长,因为每个月,我必须创建一个单独的列表,允许我添加这些列。

我正在寻找一种更简单的方法来在数据框中有条件地添加列以创建新列。基本工作流程为:如果 current_month = April,则(截至当前月份的总和)=(Jan+Feb+Mar+April)

预期输出:

| Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec |  SUM till current month |
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-------------------------|
| 2   | 3   | 4   | 5   | 6   | 7   | 8   | 9   | 12  | 1   | 3   | 5   | 14                      |
| 1   | 23  | 4   | 5   | 76  | 7   | 423 | 57  | 689 | 345 | 23  | 2   | 33                      |

标签: pythonpandasdataframemultiple-columns

解决方案


如果您想要“如果 current_month = April...”之类的内容,可以使用get_locwith iloc

df.iloc[:,:df.columns.get_loc("Apr")+1].sum(axis=1)

#
0    14
1    33
dtype: int64

推荐阅读