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

问题描述 投票:0回答:1

我正在研究的DF是这样的

co1   col2
A     ['1','2','er']
A     []
B     ['1','3','4','abc']
B     ['5']
C     [] 

我想计算col2中的列表中每个元素在col1中的每个值的百分比。 i.ecalculate % of 1 for A, calculate % of 2 for A, calculate % of abc for BI我正在寻找一个解决方案来反复做这个。谅谅

输入数据的链接(爆炸前)----------------------------------------------【https:/drive.google.comfiled1fuOBo8PK1heAtfufBlplXXfh4FiLpBCDview?usp=sharing][1] 。

爆炸后的输出链接--【】。https:/drive.google.comfiled1mcArrsu3TWJC6hYZ2kIHAkAzCaHd1DLHview?usp=sharing][2] 。

python python-3.x pandas dataframe pandas-groupby
1个回答
2
投票

我相信你需要 DataFrame.explodeDataFrame.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]
© www.soinside.com 2019 - 2024. All rights reserved.