我有以下数据框:
0 a,c,d
1 a
2 e,z
3 a
我希望只保留包含多个项目的行。 预期结果将是:
0 a,c,d
2 e,z
我尝试过使用value_counts但它没有像我想象的那样工作。有什么建议?提前谢谢。
**编辑**
根据评论中的要求,我用来制作数据帧的代码:
g = df[['A', 'B', 'C']].groupby(['A','B'])
g = g['C'].unique()
dataf = pd.DataFrame(g).reset_index()
dataf['C']
** Edit2 / Solution **
感谢Pierre Lafortune我现在有了以下解决方案。
x1 = dataf['C'].apply(lambda x: len(x) != 1)
dataf['C'][x1]
答案 0 :(得分:0)
>>> df = pd.DataFrame([['a','b','c','d'], ['c','d'], ['e']])
>>> df
0 1 2 3
0 a b c d
1 c d None None
2 e None None None
也许,不是那么优雅,但应该有用。
生成面具
mask = [np.count_nonzero(x) > 1 for x in df.iloc[:, :]]
过滤值
df[mask]
修改强>
优雅版
df = df[df.apply(lambda x: np.count_nonzero(x) > 1, axis=1)]
答案 1 :(得分:0)
另一种可能的方式:
df1[map(lambda x: len(x) != 1, df1)]
0 a,c,d
2 e,z
逻辑索引也可用于.apply
df['x'].apply(lambda x: len(x) != 1)
0 True
1 False
2 True
3 False
Name: x, dtype: bool
使用此索引:
df['x'][x1]
0 a,c,d
2 e,z
答案 2 :(得分:0)
也许df.count()
会更直观。
df = pd.DataFrame([['a','b','c','d'], ['c','d'], ['e']])
df = df[df.count() > 1]
#Result
0 1 2 3
0 a b c d
1 c d None None