【问题标题】:Calculate perc of each element in a list for each value in column in pandas dataframe为熊猫数据框中列中的每个值计算列表中每个元素的 perc
【发布时间】:2020-09-20 13:58:13
【问题描述】:

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

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

我想为 col1 中的每个值计算 col2 中列表中每个元素的百分比。 IE 为 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]

【问题讨论】:

    标签: python python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    我相信你需要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]
    

    【讨论】:

    • explode 之后,我看到 col2 中不存在的值对于 col1 中的给定值也映射到它。我的意思是数据混乱。知道是什么原因造成的。
    • 我的意思是,在您的回答中,值为“C”的 col1 在原始 df 中没有 col2 值“1”和“2”,并且在 df 之后看不到也爆炸。我在哪里看到爆炸后在我的数据中建立的这种不存在的关系。你能帮忙吗?
    • @Sid - 是否可以将这些新数据添加到问题中?或者创建新问题?
    • 当然。我的 df 中有 200 多行,所以已经上传了我的 gdrive 的前后文件。已添加问题中的链接
    • @Sid - 您是否使用上述解决方案测试此数据并引发错误?
    猜你喜欢
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2018-07-17
    • 2014-07-13
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多