Python 熊猫:将列中的列表展开为不同的行
我有一个数据集,其中包含大量包含多个值的列(从google表单导入,这些列允许多个选择)。最初我将它们作为列表导入 现在,我想根据这些列中的一些值来分析数据,即Python 熊猫:将列中的列表展开为不同的行,python,pandas,Python,Pandas,我有一个数据集,其中包含大量包含多个值的列(从google表单导入,这些列允许多个选择)。最初我将它们作为列表导入 现在,我想根据这些列中的一些值来分析数据,即 df = pd.DataFrame(dict(a=[(1,2),(2,3),(1,)], b=[(1,3),(2,5),], c=['a','b','c'])) a b c 0 (1, 2) (1, 3) a 1 (2, 3) (2, 5) b 2 (1) () c 我想
df = pd.DataFrame(dict(a=[(1,2),(2,3),(1,)], b=[(1,3),(2,5),], c=['a','b','c']))
a b c
0 (1, 2) (1, 3) a
1 (2, 3) (2, 5) b
2 (1) () c
我想绘制一个条形图,其中X是与列a和b不同的值(它们共享同一组选项),Y是具有该选项的行总数:
您可以通过对列求和(基本上连接内容)然后调用它们的
pd.value\u计数来实现这一点。例如(稍微修改数据帧定义,使其不会引发错误):
(先前对问题原文的答复):
您可以使用地图获取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
值转换为元组,以便它们可以散列(并且可以是组键):
一旦您有了这些结果中的任何一个,您就可以使用,例如,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
谢谢,我重新写了这个问题以包含上下文。我再次重新写了它以指定我真正想要的内容。对不起,读了答案后,我意识到我失去了编辑时想要实现的东西。你能再看一眼吗?对不起,这里太吵了。我错误地编辑了这个答案而不是我自己的答案。我已经恢复了更改。
>>> df.groupby(df.a.map(tuple)).filter(lambda group: 2 in group.name)
a b
0 [1, 2] a
1 [2, 3] b
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