检查列中的子集?
Checking for subset in a column?
如果证券的报价在 3 个交易日内没有变化,我正试图将一些价格数据标记为“过时”。我目前正在尝试使用:
firm["dev"] = np.std(firm["Price"],firm["Price"].shift(1),firm["Price"].shift(2))
firm["flag"] == np.where(firm["dev"] = 0, 1, 0)
但我一无所获。这就是我的数据框的样子。
Index
Price
Flag
1
10
0
2
11
0
3
12
0
4
12
0
5
12
1
6
11
0
7
13
0
感谢任何帮助!
如果你其他条件没问题,你可以先检查series.diff
是否等于0,然后取cumsum检查你的cumsum是否为2(n-1)。还要检查下一行是否等于当前,当这两个条件都满足时,分配标志 1 else 0.
n=3
firm['Flag'] = (firm['Price'].diff().eq(0).cumsum().eq(n-1) &
firm['Price'].eq(firm['Price'].shift())).astype(int)
编辑,要使其成为具有连续 n 的广义函数,请使用:
def fun(df,col,n):
c = df[col].diff().eq(0)
return (c|c.shift(-1)).cumsum().ge(n) & df[col].eq(df[col].shift())
firm['flag_2'] = fun(firm,'Price',2).astype(int)
firm['flag_3'] = fun(firm,'Price',3).astype(int)
print(firm)
Price Flag flag_2 flag_3
Index
1 10 0 0 0
2 11 0 0 0
3 12 0 0 0
4 12 0 1 0
5 12 1 1 1
6 11 0 0 0
7 13 0 0 0
如果证券的报价在 3 个交易日内没有变化,我正试图将一些价格数据标记为“过时”。我目前正在尝试使用:
firm["dev"] = np.std(firm["Price"],firm["Price"].shift(1),firm["Price"].shift(2))
firm["flag"] == np.where(firm["dev"] = 0, 1, 0)
但我一无所获。这就是我的数据框的样子。
Index | Price | Flag |
---|---|---|
1 | 10 | 0 |
2 | 11 | 0 |
3 | 12 | 0 |
4 | 12 | 0 |
5 | 12 | 1 |
6 | 11 | 0 |
7 | 13 | 0 |
感谢任何帮助!
如果你其他条件没问题,你可以先检查series.diff
是否等于0,然后取cumsum检查你的cumsum是否为2(n-1)。还要检查下一行是否等于当前,当这两个条件都满足时,分配标志 1 else 0.
n=3
firm['Flag'] = (firm['Price'].diff().eq(0).cumsum().eq(n-1) &
firm['Price'].eq(firm['Price'].shift())).astype(int)
编辑,要使其成为具有连续 n 的广义函数,请使用:
def fun(df,col,n):
c = df[col].diff().eq(0)
return (c|c.shift(-1)).cumsum().ge(n) & df[col].eq(df[col].shift())
firm['flag_2'] = fun(firm,'Price',2).astype(int)
firm['flag_3'] = fun(firm,'Price',3).astype(int)
print(firm)
Price Flag flag_2 flag_3
Index
1 10 0 0 0
2 11 0 0 0
3 12 0 0 0
4 12 0 1 0
5 12 1 1 1
6 11 0 0 0
7 13 0 0 0