Python 熊猫:将列中的列表展开为不同的行

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 我想

我有一个数据集,其中包含大量包含多个值的列(从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
我想绘制一个条形图,其中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