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

我正在处理的 df 看起来像这样


co1   col2

A     ['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]


繁花如伊
浏览 89回答 1
1回答

holdtom

我相信你DataFrame.explode需要DataFrame.dropna:#changed data for better sample     print (df)  col1           col20    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 col20    A    10    A    20    A    12    B    32    B  abc2    B  abc3    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.6666671    A    2  0.3333332    B  abc  0.7500003    B    3  0.250000编辑:import astdf = pd.read_csv('beforeexplode.csv')df['col2'] = df['col2'].apply(ast.literal_eval)df2 = df.explode('col2').dropna(subset=['col2'])print (df2)     col1     col20    dev1  android1    dev1  android2    dev3     oscp2    dev3     gpen2    dev3      ceh..    ...      ...206  dev2     wcag207  dev2    linux207  dev2     unix208  dev2    linux208  dev2     unix[460 rows x 2 columns]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python