Pandas:将列中的列表展开到不同的行

2024-06-26 09:45:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含大量列的数据集,这些列包含多个值(从googleforms导入,这些列允许多个选择)。我最初是以列表的形式导入的。在

现在我想根据这些列中的一些值来分析数据,即

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是具有选项的行总数:


Tags: 数据dataframedf列表选项绘制dict形式
2条回答

我们可以使用布尔索引来筛选列'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

您可以通过对列求和(基本上是连接内容)然后对它们调用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')

enter image description here


(先前对问题原文的答复):

您可以使用一个映射获得2所在的所有行

^{pr2}$

您可以使用groupby后跟filter来完成类似的操作,不过首先必须将a值转换为元组,以便它们是散列的(并且可以是组键):

^{3}$

一旦得到了这些结果中的任何一个,就可以使用,例如result['a'] = 2来替换a列中的值。在

相关问题 更多 >