python - 遍历 pandas df 行并执行操作
问题描述
我有一个熊猫数据框,如下所示
Date SKU Balance
0 1/1/2017 X1 8
1 1/1/2017 X2 45
2 1/1/2017 X1 47
3 1/1/2017 X2 16
4 2/1/2017 X1 14
5 2/1/2017 X2 67
6 2/1/2017 X2 9
8 2/1/2017 X1 66
9 2/1/2017 X1 158
我的第一个目标是生成每天过滤的多个数据框
我为此编码
df_1stjan = df.query("Date == \"1/1/2017\"")
我得到了以下结果
Date SKU Balance
0 1/1/2017 X1 8
1 1/1/2017 X2 45
2 1/1/2017 X1 47
3 1/1/2017 X2 16
我的第二个目标是按 SKU 分组,我编写了代码
df_1stjan_uSKU = df_1stjan.groupby(['SKU','Date'], \
as_index=False).agg({'Balance':'sum'})
我得到了以下结果
Date SKU Balance
0 1/1/2017 X1 55
1 1/1/2017 X2 61
目前我只能编码一次只为一个日期生成 df
但是我需要编写一个函数或循环来在 2017 年的所有日子里自动化它。
请注意 Date 列具有字符串 dtype
解决方案
我认为你自己把这件事弄得太复杂了。您几乎已经解决了自己的问题,但我建议您在最初的and之后进行索引。groupby
agg
示例数据框:
Balance Date SKU
0 8 1/1/2017 X1
1 45 1/1/2017 X2
2 47 1/1/2017 X1
3 16 1/1/2017 X2
4 22 1/2/2017 X3
5 24 1/2/2017 X3
6 25 1/3/2017 X4
7 3 1/3/2017 X4
groupby
和agg
df1 = df.groupby(['Date', 'SKU'], as_index=False).agg({'Balance':'sum'})
Date SKU Balance
0 1/1/2017 X1 55
1 1/1/2017 X2 61
2 1/2/2017 X3 46
3 1/3/2017 X4 28
to_datetime
转换Date
列
df1['Date'] = pd.to_datetime(df1.Date, format='%m/%d/%Y')
date_range
您想访问的所有日子
dr = pd.date_range('20170101','20170103')
loc
使用循环访问每天的切片
for d in dr:
print(df1.loc[df1.Date.isin([d])])
Date SKU Balance
0 2017-01-01 X1 55
1 2017-01-01 X2 61
Date SKU Balance
2 2017-01-02 X3 46
Date SKU Balance
3 2017-01-03 X4 28
推荐阅读
- ruby-on-rails - 如何在 Rails 中安全地存储 ruby 哈希?
- hook - React - 显示图像而不是字符串
- r - 多行的闪亮和 ggplot2
- reactjs - 在列表中使用 react redux 钩子会影响性能吗?
- r - 从我自己调用一个注册的 knitr 引擎
- python - 我需要创建一个函数来传递多个列表并返回一个字符串然后打印
- python - 是否可以在散景中制作更小的图表?或者是否可以在 python-pptx 中减小图像大小?
- c - 制作单个链接的喜欢列表的副本
- python - 如何使用 BeautifulSoup 和 requests 从网站获取数据?
- linux - 如何将shellcode解码为ascii