给出pandas.DataFrame
:
| Col_A | Col_B | Other_Columns
0 | A0 | B0 | …
1 | A1 | B1 | …
2 | A2 | B2 | …
3 | A3 | B3 | …
… | … | … | …
我一直试图保留这个DataFrame
的一个子集:摆脱A
和B
条目都是唯一的行(例如,如果在第6行,则说明两个值{ {1}}和A6
未出现在B6
上的任何其他位置,我们要删除此行)
我不想删除重复项。另外,我不想得到唯一的值(如果我理解的话,将类似于将列表转换为集合,我是对的吗?)而是仅出现一次的值。
此时,这就是我所拥有的:
DataFrame
这不是很有效(数据框相当大> 10M行)必须有更多的pythonic策略,涉及熊猫的内置功能,对吧? 另外,我不太确定第一行是否正确:通过堆叠两列,我是否确保对两列的条目执行计数?
如果您需要更多信息或我的书写不清楚,请不要犹豫。
非常感谢您抽出时间: - )
答案 0 :(得分:1)
这样的事情:
In [75]: df = pd.DataFrame(np.random.randint(0,100,size=(10, 3)), columns=list('abc'))
In [76]: df
Out[76]:
a b c
0 37 85 17
1 19 0 11
2 51 20 65
3 59 92 65
4 48 15 91
5 21 50 44
6 61 94 49
7 51 6 88
8 89 72 40
9 5 51 79
In [77]: c = df[['a','b']].stack().value_counts()
In [78]: c
Out[78]:
51 3
94 1
15 1
37 1
6 1
72 1
50 1
21 1
5 1
48 1
61 1
19 1
20 1
85 1
89 1
59 1
92 1
0 1
dtype: int64
In [79]: c[c>1]
Out[79]:
51 3
dtype: int64
In [80]: vals = c[c>1].index
In [81]: df[(df['a'].isin(vals)) | (df['b'].isin(vals))]
Out[81]:
a b c
2 51 20 65
7 51 6 88
9 5 51 79
<强>更新强>
当你进行if (df.at[i,'Col_A'] and df.at[i, 'Col_B']) in myList:
检查时,你检查它不是很正确......
这是正在发生的事情:
In [90]: df.at[0, 'a'], df.at[0, 'b']
Out[90]: (37, 85)
In [91]: (df.at[0, 'a'] and df.at[0, 'b'])
Out[91]: 85
所以你不能这样检查