【发布时间】:2020-04-24 04:24:55
【问题描述】:
我有一个采用这种形式的数据框(但有几百万行):
import pandas as pd
dict = {'id':["A", "A", "A", "B", "B", "B", "C", "C", "C", "D", "D", "D"],
'year': ["2000", "2001", "2002", "2000", "2001", "2003", "1999", "2000", "2001", "2000", "2000", "2001"],
'vacation':["France", "Morocco", "Morocco", "Germany", "Germany", "Germany", "Japan", "Australia", "Japan", "Canada", "Mexico", "China"],
'new':[1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1]}
df = pd.DataFrame(dict)
A 2000 France
A 2001 Morocco
A 2002 Morocco
B 2000 Germany
B 2001 Germany
B 2003 Germany
C 1999 Japan
C 2000 Australia
C 2001 Japan
D 2000 Canada
D 2000 Mexico
D 2001 China
对于每一年的每个人,都会给出度假目的地;一年中可以有多个度假目的地。 当参与者去一个他们前一年没有去过的目的地(即目的地是新的)去度假时,我想标记这些行。在上述情况下,输出将是:
id year vacation new
A 2000 France 1
A 2001 Morocco 1
A 2002 Morocco 0
B 2001 Germany 1
B 2002 Germany 0
B 2003 Germany 0
C 1999 Japan 1
C 1999 Australia 1
C 2000 Japan 1
D 2000 Canada 1
D 2000 Mexico 1
D 2001 China 1
对于 A、B、C 和 D,我们数据框中的第一个度假目的地被标记为新的。当 A 连续两年去摩洛哥时,没有标记第二次出现,因为 A 前一年去了那里。当 B 连续 3 次去德国时,不标记第 2 次和第 3 次。当人 C 两次去日本时,所有的事件都被标记,因为他们没有连续两年去日本 。 D 去了 3 个不同的目的地(尽管在 2000 年去了 2 个目的地)并且所有这些目的地都被标记了。
我一直在尝试自己解决这个问题,但一直无法摆脱迭代,对于如此庞大的数据集而言,迭代计算量太大。
我将不胜感激;谢谢。
【问题讨论】:
标签: python-3.x pandas time-series