Pandas: 条件滚动计数 v.2
Pandas: conditional rolling count v.2
请帮忙。我有数据框:
trade_type
0 -
1 Buy
2 -
3 -
4 Sell
5 Buy
6 -
7 Sell
8 -
9 Sell
10 -
我需要滚动计数所有 != "-" 直到下一次更改并将其存储在新列的每一行中 "trade_ID",所以它看起来像这样:
trade_type trade_ID
0 - 0
1 Buy 1
2 - 1
3 - 1
4 Sell 2
5 Buy 3
6 - 3
7 Sell 4
8 - 4
9 Sell 5
10 - 5
我尝试使用:
df['trade_ID'] = (df.trade_type.shift(1) != df.trade_type).astype(int).cumsum()
但它将“-”算作新的更改,因此它不起作用。
将 -
替换为 np.nan
(在 import numpy as np
之后)并过滤 series.notna()
and apply series.cumsum()
:
df['trade_ID']=df.trade_type.replace("-",np.nan).notna().cumsum()
print(df)
trade_type trade_ID
0 - 0
1 Buy 1
2 - 1
3 - 1
4 Sell 2
5 Buy 3
6 - 3
7 Sell 4
8 - 4
9 Sell 5
10 - 5
请帮忙。我有数据框:
trade_type
0 -
1 Buy
2 -
3 -
4 Sell
5 Buy
6 -
7 Sell
8 -
9 Sell
10 -
我需要滚动计数所有 != "-" 直到下一次更改并将其存储在新列的每一行中 "trade_ID",所以它看起来像这样:
trade_type trade_ID
0 - 0
1 Buy 1
2 - 1
3 - 1
4 Sell 2
5 Buy 3
6 - 3
7 Sell 4
8 - 4
9 Sell 5
10 - 5
我尝试使用:
df['trade_ID'] = (df.trade_type.shift(1) != df.trade_type).astype(int).cumsum()
但它将“-”算作新的更改,因此它不起作用。
将 -
替换为 np.nan
(在 import numpy as np
之后)并过滤 series.notna()
and apply series.cumsum()
:
df['trade_ID']=df.trade_type.replace("-",np.nan).notna().cumsum()
print(df)
trade_type trade_ID
0 - 0
1 Buy 1
2 - 1
3 - 1
4 Sell 2
5 Buy 3
6 - 3
7 Sell 4
8 - 4
9 Sell 5
10 - 5