为了账号安全,请及时绑定邮箱和手机立即绑定

用大熊猫划分垃圾箱

用大熊猫划分垃圾箱

哆啦的时光机 2021-12-09 16:35:19
我在熊猫中有一个如下所示的数据框。索引是日期时间对象,按天排序,分为 5 分钟区间。我有一个名为“col1”的列。所以如果我这样做df['col1']我得到:DateTime2008-04-28 09:40:00     300.02008-04-28 09:45:00    -800.02008-04-28 09:50:00       0.02008-04-28 09:55:00    -100.02008-04-28 10:00:00       0.0    2008-04-29 09:40:00     500.02008-04-29 09:45:00     800.02008-04-29 09:50:00     100.02008-04-29 09:55:00    -100.02008-04-29 10:00:00       0.0我在原始数据帧中使用 groupby 获得了另一个数据帧df2 = df([df.index.time])[['col2']].mean()    输出:           col209:40:00   4603.58565709:45:00   5547.01195209:50:00   8532.00795209:55:00   6175.29880510:00:00   4236.055777我想要做的是在不使用 for 循环的情况下,为 5 分钟的 bin 中的每一个将 col1 除以 col2。为了更好地解释,在所有的日子里,每个 bin 将 col1 除以 col2。例如,将 col1 中的所有 9:40:00 值除以 col2 中的 9:40:00 值。我不知道如何在没有 for 循环的情况下开始执行此操作,但我的印象是它应该可以用 Pandas 执行。预期的输出是:DateTime2008-04-28 09:40:00     300.0/4603.5856572008-04-28 09:45:00    -800.0/5547.0119522008-04-28 09:50:00       0.0/8532.0079522008-04-28 09:55:00    -100.0/6175.2988052008-04-28 10:00:00       0.0/4236.055777  2008-04-29 09:40:00     500.0/4603.5856572008-04-29 09:45:00     800.0/5547.0119522008-04-29 09:50:00     100.0/8532.0079522008-04-29 09:55:00    -100.0/6175.2988052008-04-29 10:00:00       0.0/4236.055777
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

如果需要分次:


df['new'] = df['col1'].div(df.groupby(df.index.time)['col1'].transform('mean'))

print (df)

                      col1   new

DateTime                        

2008-04-28 09:40:00  300.0  0.75

2008-04-28 09:45:00 -800.0  -inf

2008-04-28 09:50:00    0.0  0.00

2008-04-28 09:55:00 -100.0  1.00

2008-04-28 10:00:00    0.0   NaN

2008-04-29 09:40:00  500.0  1.25

2008-04-29 09:45:00  800.0   inf

2008-04-29 09:50:00  100.0  2.00

2008-04-29 09:55:00 -100.0  1.00

2008-04-29 10:00:00    0.0   NaN

或者如果需要按天划分:


df['new'] = df['col1'].div(df.groupby(df.index.date)['col1'].transform('mean'))

print (df)

                      col1       new

DateTime                            

2008-04-28 09:40:00  300.0 -2.500000

2008-04-28 09:45:00 -800.0  6.666667

2008-04-28 09:50:00    0.0 -0.000000

2008-04-28 09:55:00 -100.0  0.833333

2008-04-28 10:00:00    0.0 -0.000000

2008-04-29 09:40:00  500.0  1.923077

2008-04-29 09:45:00  800.0  3.076923

2008-04-29 09:50:00  100.0  0.384615

2008-04-29 09:55:00 -100.0 -0.384615

2008-04-29 10:00:00    0.0  0.000000


查看完整回答
反对 回复 2021-12-09
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信