gpt4 book ai didi

Python - 200万行表中的计数器

转载 作者:太空狗 更新时间:2023-10-30 00:58:31 25 4
gpt4 key购买 nike

例如,我有以下数据框:

Date                     Balance
2013-04-01 03:50:00 A
2013-04-01 04:00:00 A
2013-04-01 04:15:00 B
2013-04-01 04:15:00 B
2013-04-01 04:25:00 A
2013-04-01 04:25:00 A
2013-04-01 04:35:00 B
2013-04-01 04:40:00 B
2013-04-02 04:55:00 B
2013-04-02 04:56:00 A
2013-04-02 04:57:00 A
2013-04-03 10:30:00 A
2013-04-03 16:35:00 A
2013-04-03 20:40:00 A

我的目标是添加一列“计数器”,基本上显示 A 和 B 的数量平衡。因此,每次出现 A 时,计数器列都会增加一个值。每出现一次 B,计数器列就减少一个值。如果两个 A 在同一时间(同一日期)出现在连续的两行中,则两行的余额都应增加两倍(相同的推理适用于连续的 B 或 A 和 B 同时出现)。因此,数据框最终看起来像这样:

 Date                     Balance        Counter
2013-04-01 03:50:00 A 1
2013-04-01 04:00:00 A 2
2013-04-01 04:15:00 B 0
2013-04-01 04:15:00 B 0
2013-04-01 04:25:00 A 2
2013-04-01 04:25:00 A 2
2013-04-01 04:35:00 B 1
2013-04-01 04:40:00 B 0
2013-04-02 04:55:00 B -1
2013-04-02 04:56:00 A 0
2013-04-02 04:57:00 A 1
2013-04-03 10:30:00 A 2
2013-04-03 16:35:00 A 3
2013-04-03 20:40:00 A 4

主要问题是dataframe有超过200万行,因此执行一个循环真的很耗时。有什么方法可以针对这个问题实现矢量化方法吗?

编辑(如果连续行上的日期不同,我能够编译一个运行良好的解决方案)。谁能帮我弄清楚其余的?

d = {'Date': ['2013-04-01 03:50:00', '2013-04-01 04:00:00','2013-04-01 
04:15:00','2013-04-01 04:15:00','2013-04-01 04:25:00',
'2013-04-01 04:25:00','2013-04-01 04:35:00','2013-04-01 04:40:00','2013-04-
02 04:55:00','2013-04-02 04:56:00',
'2013-04-02 04:57:00','2013-04-03 10:30:00','2013-04-03 16:35:00','2013-04-
03 20:40:00'], 'Balance': ['A','A','B','B','A','A','B','B','B',
'A','A','A','A','A',]}

df = pd.DataFrame(data=d)

df['plus_minus'] = np.where(df.Balance == 'A', 1, -1)
df['Counter'] = df['plus_minus'].cumsum()

最佳答案

一种方法是按日期分组并对值求和。其累积总和为您提供该日期时间结束时的净值,然后我们可以按日期重新编制索引以将结果广播回主框架:

df['plus_minus'] = np.where(df.Balance == 'A', 1, -1)
by_dt = df["plus_minus"].groupby(df["Date"]).sum().cumsum()
df["Counter2"] = by_dt.reindex(df.Date).values

给我

                   Date Balance  Counter  plus_minus  Counter2
0 2013-04-01 03:50:00 A 1 1 1
1 2013-04-01 04:00:00 A 2 1 2
2 2013-04-01 04:15:00 B 0 -1 0
3 2013-04-01 04:15:00 B 0 -1 0
4 2013-04-01 04:25:00 A 2 1 2
5 2013-04-01 04:25:00 A 2 1 2
6 2013-04-01 04:35:00 B 1 -1 1
7 2013-04-01 04:40:00 B 0 -1 0
8 2013-04-02 04:55:00 B -1 -1 -1
9 2013-04-02 04:56:00 A 0 1 0
10 2013-04-02 04:57:00 A 1 1 1
11 2013-04-03 10:30:00 A 2 1 2
12 2013-04-03 16:35:00 A 3 1 3
13 2013-04-03 20:40:00 A 4 1 4

关于Python - 200万行表中的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51442589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com