我正在尝试基于过滤数据帧,以便保留以前未在X列中显示的整个行。如果已经发生过,那么我需要将Y列中的值与第一行中Y列中的值进行比较。
示例:
MM Bid Sz Bid
BP1 15 73.20
TWD1 15 73.15
SPAC 250 71.00
BCOM1 500 71.00
BP2 500 71.00
TWD2 500 71.00
BP3 250 71.00
MC1 500 71.00
MC2 275 70.25
TWD3 275 70.10
MC3 150 68.00
答案 0 :(得分:1)
使用df.drop_duplicates
。在您的示例中,如果要删除在上一行中见证的具有Bid
值的行,则应调用<your_dataframe>.drop_duplicates(subset="Bid")
。在这里,keep
关键字参数具有默认值"first"
,这是您想要的行为,因此无需进行设置。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html
答案 1 :(得分:0)
我可能需要更多信息来解决您的问题,但是希望这可以帮助您前进。
我在这里制作了一个数据框:
import pandas as pd
import numpy as np
df = pd.DataFrame(data={'X': [1,1,2,3,4,5], 'Y':['kept', 'dropped', 2, 3, 4, 5]}); df
看起来像这样...
X Y
1 kept
1 dropped
2 2
3 3
4 4
5 5
然后,我将非唯一值放在df['X']
中,并将kept
的{{1}}出现在值中:
'first'
现在,我的df = df.drop_duplicates(subset=['X'], keep='first');df
看起来像这样:
df
使用X Y
1 kept
2 2
3 3
4 4
5 5
可以确保仅将一行中的唯一值至少保持某种逻辑程度。但是,您可能还需要考虑使用drop_duplicates
遍历数据帧以检查唯一值并同时进行比较。这将大大提高效率。
最后,如果这不是您想要的,请让我知道和/或提供更多信息。我很乐意提供帮助!