我有一个如下所示的数据框:
| id | col1 | col2 | col3 | col4 |
|------|------|------|------|------|
| 1 | A | B | C | 0 |
| 2 | M | 0 | M | 0 |
| 3 | B | B | 0 | B |
| 4 | X | 0 | Y | 0 |
我想忽略任何在各自列中只有一个唯一值的行。我最终得到了这个:
| id | col1 | col2 | col3 | col4 |
|------|------|------|------|------|
| 1 | A | B | C | 0 |
| 4 | X | 0 | Y | 0 |
这是一件看似简单的事情。但我似乎无法找到关于如何在Pandas中执行此操作的任何提示,因为人们似乎最感兴趣的是删除与其他行重复的行,而不是那些在行本身中只有重复值的行。 / p>
df = [ {'id' : 1, 'col1' : 'A', 'col2': 'B', 'col3': 'C', 'col4':'0'},
{'id' : 2, 'col1' : 'M', 'col2': '0', 'col3': 'M', 'col4':'0'},
{'id' : 3, 'col1' : 'B', 'col2': 'B', 'col3': '0', 'col4':'0'},
{'id' : 4, 'col1' : 'X', 'col2': '0', 'col3': 'Y', 'col4':'0'}
]
df = pd.DataFrame(df)
df = df[['col1', 'col2', 'col3', 'col4']]
df
小注意:在我的情况下,值'0'
实际上是一个字符串
此时所有行至少有一个值。
答案 0 :(得分:2)
尝试:
df[df.apply(lambda x: x[x != '0'].nunique(), axis=1) > 1]
使用'id'
df.set_index('id')[df.set_index('id').apply(lambda x: x[x != '0'].nunique(), axis=1) > 1].reset_index()
答案 1 :(得分:0)
解决方案是查看转置的数据框并搜索重复项。
您可以这样做:
url('^registration/', views.WHATEVER_VIEW_YOU_WANT_USE)
这将为您提供布尔系列,其中行具有重复项并使用此系列过滤您的数据框。