python,计算数据框中列表的唯一列表值

Posted

技术标签:

【中文标题】python,计算数据框中列表的唯一列表值【英文标题】:python, count unique list values of a list inside a data frame 【发布时间】:2020-11-27 16:14:54 【问题描述】:

我有一个包含两列用户反馈的数据框。

第一列来自调查的多项选择答案。该列的每一行都是他们选择的答案的列表。

下一列是年龄范围的类别。所以一行将包含用户颜色偏好和年龄范围的列表。

例如

what colours do you like?         age
['yellow','orange','green']       18-25
['yellow']                        18-25
['blue','green','red','orange']   26-30
['blue','red']                    26-30

我希望获取列表中每种颜色的单独计数,然后按年龄范围划分 所需的输出:

age    colour   count
18-25  yellow     2
18-25  orange     1
18-25  green      1
26-30  blue       2
26-30  green      1
26-30  red        2
26-30  orange     1

提前致谢!

【问题讨论】:

【参考方案1】:

将数据帧的索引设置为age,然后在what colours do you like?' 列上使用Series.explode,然后在level=0 上使用groupby,并使用value_counts 聚合系列:

df1 = (
    df.set_index('age')['what colours do you like?'].explode()
    .rename('color').groupby(level=0).value_counts().reset_index(name='count')
)

结果:

print(df1)
     age   color  count
0  18-25  yellow      2
1  18-25   green      1
2  18-25  orange      1
3  26-30    blue      2
4  26-30     red      2
5  26-30   green      1
6  26-30  orange      1

【讨论】:

【参考方案2】:

另一种选择:

df1 = df.apply(lambda x: [str(x[0][i]) + " " + str(x[1]) for i in range(len(x[0]))], axis = 1).agg("sum")
df1 = pd.DataFrame(np.unique(df1, return_counts = True), index = ["A","count"]).T
df1[["colour","age"]] = df1.A.str.split(expand = True)
df1 = df1.drop("A")

它应该输出:

df1

   count   age   color  
0      2 18-25  yellow  
1      1 18-25   green  
2      1 18-25  orange  
3      2 26-30    blue  
4      2 26-30     red  
5      1 26-30   green  
6      1 26-30  orange  

【讨论】:

以上是关于python,计算数据框中列表的唯一列表值的主要内容,如果未能解决你的问题,请参考以下文章

如何在检查唯一值的同时将数据从一个表单插入到另一个表单的列表框中?

Python:计算python数据框中每个数字的出现次数

对于python中给定的值条件,将列名作为数据框中的列表返回

Python Selenium - 计算列表框中的项目数

如何提取/拆分数据框中的列表列以分隔唯一列?

在 R 中对列表中的唯一值进行分组的方法?