我有一个pandas数据框,其中有一列指示帐户的条款是否在某个特定期间发生了更改,值为“Y”。 举个例子:
import pandas as pd
account = [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3]
period = [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 1, 2, 3]
changed = ["N", "N", "N", "Y", "N", "N", "N", "Y", "N", "N", "N", "N", "N", "N"]
df = pd.DataFrame({'account': account,'period': period,'changed': changed})
print(df)
account period changed
0 1 1 N
1 1 2 N
2 1 3 N
3 1 4 Y
4 1 5 N
5 1 6 N
6 2 1 N
7 2 2 Y
8 2 3 N
9 2 4 N
10 2 5 N
11 3 1 N
12 3 2 N
13 3 3 N
我想把改变了的列变成一个开关,一旦打开,就为那个帐户保持打开。我还希望将开关转换为0和1,如下所示
有没有一种方法可以做到这一点,而不必循环通过每个帐户。我有数百万个账户
account period changed
0 1 1 0
1 1 2 0
2 1 3 0
3 1 4 1
4 1 5 1
5 1 6 1
6 2 1 0
7 2 2 1
8 2 3 1
9 2 4 1
10 2 5 1
11 3 1 0
12 3 2 0
13 3 3 0
这更像是带有
cumsum
问题的groupby
您可以使用布尔比较并转换为
int
。然后使用GroupBy
+cummax
来识别account
历史上发生的变化:相关问题 更多 >
编程相关推荐