一列中的值的数据帧计数

时间:2015-11-14 13:09:02

标签: python pandas dataframe

我有以下数据框:

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]

3 个答案:

答案 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