为了账号安全,请及时绑定邮箱和手机立即绑定

为 pandas 数据框中列中的每个值计算列表中每个元素的 perc

为 pandas 数据框中列中的每个值计算列表中每个元素的 perc

繁花如伊 2022-12-20 12:18:35
我正在处理的 df 看起来像这样co1   col2A     ['1','2','er']A     []B     ['1','3','4','abc']B     ['5']C     [] 我想为 col1 中的每个值计算 col2 列表中每个元素的百分比。即为 A 计算 1 的百分比,为 A 计算 2 的百分比,为 B 计算 abc 的百分比我正在寻找一种解决方案来迭代执行此操作。谢谢输入数据的链接(爆炸前)- [ https://drive.google.com/file/d/1fuOBo8PK1heAtfufBlplXXfh4FiLpBCD/view?usp=sharing][1]爆炸后的输出链接 - [ https://drive.google.com/file/d/1mcArrsu3TWJC6hYZ2kIHAkAzCaHd1DLH/view?usp=sharing][2]
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

我相信你DataFrame.explode需要DataFrame.dropna

#changed data for better sample     

print (df)

  col1           col2

0    A      [1, 2, 1]

1    A             []

2    B  [3, abc, abc]

3    B          [abc]

4    C             []


df2 = df.explode('col2').dropna(subset=['col2'])

print (df2)

  col1 col2

0    A    1

0    A    2

0    A    1

2    B    3

2    B  abc

2    B  abc

3    B  abc

然后SeriesGroupBy.value_counts


df2 = df2.groupby('col1')['col2'].value_counts(normalize=True).reset_index(name='%')

print (df2)

  col1 col2         %

0    A    1  0.666667

1    A    2  0.333333

2    B  abc  0.750000

3    B    3  0.250000

编辑:


import ast


df = pd.read_csv('beforeexplode.csv')


df['col2'] = df['col2'].apply(ast.literal_eval)

df2 = df.explode('col2').dropna(subset=['col2'])

print (df2)

     col1     col2

0    dev1  android

1    dev1  android

2    dev3     oscp

2    dev3     gpen

2    dev3      ceh

..    ...      ...

206  dev2     wcag

207  dev2    linux

207  dev2     unix

208  dev2    linux

208  dev2     unix


[460 rows x 2 columns]


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信