python - 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 |
解决方案
如果您想要“如果 current_month = April...”之类的内容,可以使用get_loc
with iloc
:
df.iloc[:,:df.columns.get_loc("Apr")+1].sum(axis=1)
#
0 14
1 33
dtype: int64
推荐阅读
- angular - Angular ngrx 管理父子之间的可观察对象和订阅
- c++ - 斐波那契记忆 - 通过左值与右值参考传递
- reactjs - React - 我不能将我的 datepicker 值作为参数传递,因为它是一个对象,我似乎无法将它转换为字符串
- vagrant - 如何使用转发端口访问 vagrant 容器端口?
- javascript - 在 javascript 中添加到 Firebase Cloud Messaging 的 channel_id 是什么?
- excel - 复制到另一张工作表时 Excel VBA 跳过空白
- google-coral - winpty: 错误: 无法启动'mdt': Not found in PATH [Mendel Development tool]
- image - 如何显示从 google colab 中解压缩的 google drive 文件夹中选择的图像
- python - TypedDict 的 Python typehint 子集(部分)
- stored-procedures - 调用存储过程抛出错误时如何使任务失败