投放市场d

2024-05-23 23:45:07 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,假设我们有市场数据更新,我们正在寻找。你知道吗

 1. Bid 1 Ask 1.5
 2. Bid 1 Ask 1.5
 3. Bid 1 Ask 1.5
 4. Bid 1.5 Ask 2
 5. Bid 1.5 Ask 2
 6. Bid 2 Ask 2.5
 7. Bid 2 Ask 2.5
 8. Bid 2 Ask 3

我正在寻找这个使用滴滴\u副本,以保持只有时间,出价或要求的变化。我试过了

df.drop_duplicates(cols=['Bid,Ask'])

但结果并没有达到我的预期。我希望在这个列表中的行为是将列表压缩成(假设数字是索引,所以保留索引)

 1. Bid 1 Ask 1.5
 4. Bid 1.5 Ask 2
 6. Bid 2 Ask 2.5
 8. Bid 2 Ask 3

因此,如果出价和要价都与前一行相同,则会删除该行。

有什么明显的方法吗?你知道吗


Tags: 数据方法df列表市场时间副本数字
2条回答

您可以使用.shift()移动列,并使用any检查差异。例如,给定一个像

>>> df
   Bid  Ask
1  1.0  1.5
2  1.0  1.5
3  1.0  1.5
4  1.5  2.0
5  1.5  2.0
6  2.0  2.5
7  2.0  2.5
8  2.0  3.0
>>> df[(df != df.shift()).any(axis=1)]
   Bid  Ask
1  1.0  1.5
4  1.5  2.0
6  2.0  2.5
8  2.0  3.0

我们一步一步地向下移动1:

>>> df.shift()
   Bid  Ask
1  NaN  NaN
2  1.0  1.5
3  1.0  1.5
4  1.0  1.5
5  1.5  2.0
6  1.5  2.0
7  2.0  2.5
8  2.0  2.5

我们将数据帧与其移位版本进行比较:

>>> df != df.shift()
     Bid    Ask
1   True   True
2  False  False
3  False  False
4   True   True
5  False  False
6   True   True
7  False  False
8  False   True

然后我们做一个级数,只有其中一个是真的,并且一行与下一行不同时,这个级数才是真的:

>>> (df != df.shift()).any(axis=1)
1     True
2    False
3    False
4     True
5    False
6     True
7    False
8     True
dtype: bool

您并不是真的要删除重复的行,而是要删除相同的后续行。因为同一个买卖对在一天中可能发生多次,而不一定是连续发生的。我会像这样循环遍历数据帧:

for i in df.index:
    if(i-1 in df.index and df['Ask'][i]==df['Ask'][i-1] and df['Bid'][i]==df['Bid'][i]):
        df = df.drop([i])

我相信有一个更优雅的解决方案,但这是你可以找到有用的一般想法。。。你知道吗

相关问题 更多 >