我有一个df列,每个单元格都包含一个字典,所以当我将value_counts应用到这个列时,我会得到每个字典出现的次数的结果。但我需要的是得到独立值的肝硬化数目。列单元格如下所示:
col1
1 [{'name': 'John'}, {'name': 'Mark'}, {'name': 'Susan'}, {'name': 'Mr.Bean'}, {'name': 'The
Smiths'}]
2 [{'name': 'Mark'}, {'name': 'Barbara}, {'name': 'Poly'}, {'name': 'John'}, {'name': 'Nick'}]
因此,基本上,我需要的是在整个列中有多少苏珊斯、约翰斯等等。
如有任何帮助,将不胜感激。
发布于 2022-06-23 09:23:45
您可以使用@jch安装程序来尝试此操作:
df = pd.DataFrame({'col1': [ [{'name': 'John'}, {'name': 'Mark'}, {'name': 'Susan'}, {'name': 'Mr.Bean'}, {'name': 'The Smiths'}], \
[{'name': 'Mark'}, {'name': 'Barbara'}, {'name': 'Poly'}, {'name': 'John'}, {'name': 'Nick'}] ] })
pd.DataFrame(df['col1'].to_list()).stack().str['name'].value_counts()
输出:
John 2
Mark 2
Susan 1
Mr.Bean 1
The Smiths 1
Barbara 1
Poly 1
Nick 1
dtype: int64
让我们使用熊猫DataFrame构造函数,stack
对单个列进行整形,然后使用来自.str
访问器的选择器从字典中获取值,最后使用value_counts
。
发布于 2022-06-23 09:01:13
数据实际上是每行字典的列表。您可以从每一行构建一个数据帧。然后,这些名称包含在一个列中,该列可以转换为一个列表,然后爆炸,然后对其执行一个value_counts
:
df = pd.DataFrame({'col1': [ [{'name': 'John'}, {'name': 'Mark'}, {'name': 'Susan'}, {'name': 'Mr.Bean'}, {'name': 'The Smiths'}], \
[{'name': 'Mark'}, {'name': 'Barbara'}, {'name': 'Poly'}, {'name': 'John'}, {'name': 'Nick'}] ] })
print(df)
输出:
col1
0 [{'name': 'John'}, {'name': 'Mark'}, {'name': ...
1 [{'name': 'Mark'}, {'name': 'Barbara'}, {'name...
value_count:
df.apply(lambda x: pd.DataFrame(x['col1']).squeeze().to_list(), axis=1).explode().value_counts()
产出:
John 2
Mark 2
Susan 1
Mr.Bean 1
The Smiths 1
Barbara 1
Poly 1
Nick 1
发布于 2022-06-23 23:17:01
我们可以使用explode()
函数将类似于列表的每个元素转换为一行,复制索引值。然后,我们可以使用json_normalize
将字典中的每个键转换为列。然后,可以使用value_counts()
来计算dataFrame中的每个唯一值。
df = pd.DataFrame({'col1': [ [{'name': 'John'}, {'name': 'Mark'}, {'name': 'Susan'}, {'name': 'Mr.Bean'}, {'name': 'The Smiths'}], \
[{'name': 'Mark'}, {'name': 'Barbara'}, {'name': 'Poly'}, {'name': 'John'}, {'name': 'Nick'}] ] })
print(pd.json_normalize(df.col1.explode()).value_counts())
结果:
name
John 2
Mark 2
Barbara 1
Mr.Bean 1
Nick 1
Poly 1
Susan 1
The Smiths 1
如果您想得到任何一个名称的计数,请说John
name = 'John'
print(pd.json_normalize(df.col1.explode()).eq(name).sum())
结果:
2
https://stackoverflow.com/questions/72732992
复制相似问题