亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為 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 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號