【发布时间】:2025-12-22 18:25:11
【问题描述】:
给定一个pandas.DataFrame:
| Col_A | Col_B | Other_Columns
0 | A0 | B0 | …
1 | A1 | B1 | …
2 | A2 | B2 | …
3 | A3 | B3 | …
… | … | … | …
我一直在尝试保留 DataFrame 的一个子集:删除 A 和 B 条目都是唯一的行(例如,如果在第 6 行,两个值 A6 和 B6不要出现在DataFrame 的其他任何地方,我们要删除此行)
我不想删除重复项。另外,我不想获得唯一值(如果我理解得很好,这类似于将列表转换为集合,对吗?),而是只出现一次的值。
在这一点上,这就是我得到的:
counts = df[['Col_A','Col_B']].stack().value_counts(ascending=True)
myList = [0] + [item for item in counts[counts.values == 1].index]
toRemove = []
for i in df.index:
if (df.at[i,'Col_A'] and df.at[i, 'Col_B']) in myList:
toRemove.append(i)
final_df = df[~df.index.isin(toRemove)]
这不是很有效(数据框很大>10M行)必须有一个更pythonic的策略,涉及pandas的内置功能,对吧? 另外,我不太确定第一行是否正确:通过堆叠两列,我是否确保对两列的条目进行计数?
如果您需要更多信息或我的文字对您来说不清楚,请不要犹豫。
非常感谢您抽出宝贵时间:-)
【问题讨论】:
-
@unutbu,IMO 不是重复的。 OP 希望保留 either 列中的值不唯一的行
-
@MaxU:我的错;感谢您重新打开。