从列表列创建聚合数据框

时间:2019-10-28 18:37:13

标签: python pandas

我有一个使用Pygithub从Github存储库中提取的问题的数据框。当前的结构如下所示-

assignees  |  open?  |  issue_id
n/a           yes        1
[p1, p2]      no         2
[p5]          no         3
[p1, p5, p2]  yes        4

我想修改/旋转表,使其看起来像-

assignee  |   yes   |    no
n/a            1          0
p1             1          1
p2             1          1
p5             1          1

我尝试了pd.Series(Counter(chain.from_iterable(df['assignees']))),但这将n / a值分成三个单独的值(“ n”,“ /”和“ a”)。我也不确定如何处理另一列中的值。我一直在寻找一种反向的group_by方法,但是到目前为止,我的谷歌搜索技能使我失败了。

要创建测试数据框:

data = {'assignees': ['n/a', ['p1', 'p2'], ['p5'], ['p1', 'p5', 'p2']], 
        'open?': ['yes', 'no', 'no', 'yes'], 
        'issue_id': [1,2,3,4]}

df = pd.DataFrame(data)

非常感谢!

1 个答案:

答案 0 :(得分:4)

IIUC,让我们尝试熊猫0.25.0+ explode

df_out = df.set_index(['open?','issue_id'])['assignees'].explode().reset_index()

df_out.pivot_table(index='assignees', 
                   columns='open?', 
                   values='issue_id', 
                   aggfunc='count', 
                   fill_value=0)

输出:

open?      no  yes
assignees         
n/a         0    1
p1          1    1
p2          1    1
p5          1    1