[英]Pandas: expand list in column to distinct rows
您可以通过对列求和(基本上是将内容串联起来),然后对它们调用pd.value_counts
来实现。 例如(略微修改数据框定义,这样就不会引发错误):
df = pd.DataFrame(dict(a=[(1,2),(2,3),(1,)],
b=[(1,3),(2,5),()],
c=['a','b','c']))
counts = pd.DataFrame({col: pd.value_counts(df[col].sum())
for col in ['a', 'b']})
counts.plot(kind='bar')
(该问题的原始版本的先前答案):
您可以使用地图获取2
中a
所有行,例如
>>> df = pd.DataFrame(dict(a=[[1,2],[2,3],[1,3]], b=['a','b','c']))
>>> df
a b
0 [1, 2] a
1 [2, 3] b
2 [1, 3] c
>>> df[df.a.map(lambda L: 2 in L)]
a b
0 [1, 2] a
1 [2, 3] b
您可以使用groupby
后跟filter
来完成类似的操作,尽管首先必须将a
值转换为元组,以便它们可哈希化(并且可以是组键):
>>> df.groupby(df.a.map(tuple)).filter(lambda group: 2 in group.name)
a b
0 [1, 2] a
1 [2, 3] b
一旦获得这些结果之一,就可以使用例如result['a'] = 2
替换a
列中的值。
我们可以使用布尔索引来过滤在'a'
列中没有2
记录。
df = pd.DataFrame(dict(a=[[1,2],[2,3],[5,6]], b=['a','b','c']))
df
Out[16]:
a b
0 [1, 2] a
1 [2, 3] b
2 [5, 6] c
df[df.a.apply(lambda x: 2 in x)]
Out[17]:
a b
0 [1, 2] a
1 [2, 3] b
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.