【问题标题】:Pandas DataFrame Groupby two columns and get different relation in same keys insert listPandas DataFrame Groupby两列并在相同的键插入列表中获得不同的关系
【发布时间】:2022-01-20 17:09:22
【问题描述】:

我有这张桌子:

  Head  Relation    Tail 
0   9       1          0 
1   10      1         11  
2   9       0         23 
3   10      1         61 
4   9       0         12
5   10      0         66
6   10      0         61

我必须创建一个字典,其 Head 键和值等于关系但不重复,并且对于关系的每个值我必须插入相应的尾部。

示例:

{9 : {1: [10], 0:[23,12]}, 10 : {1:[11,61], 0:[66,61]}}

我真的不知道该怎么做。有人可以帮助我吗?

第二个输入示例:

    Head    Relation    Tail  
  0 207       1         269  
  1 207       1          61  
  2 207       0          62  
  3 208       1          269 
  4 290       0          269

输出:

{207: {0: [62], 1: [269,61]}, 208: {0: nan, 1: [269]},
 290: {0: [269], 1: nan}}

我想删除 nans

【问题讨论】:

    标签: python pandas dataframe dictionary pandas-groupby


    【解决方案1】:

    您可以使用pivot_tableto_dict

    (df.pivot_table(index='Head', columns='Relation', values='Tail', aggfunc=list)
       .to_dict('index')
    )
    

    或者,反过来:

    (df.pivot_table(index='Relation', columns='Head', values='Tail', aggfunc=list)
       .to_dict()
    )
    

    输出:

    {9: {0: [23, 12], 1: [0]}, 10: {0: [66, 61], 1: [11, 61]}}
    
    对输出进行后处理以删除 NaN:
    d = (df.pivot_table(columns='Head', index='Relation', values='Tail', aggfunc=list)
         .to_dict()
         )
    
    d2 = {k: {k2:v2 for k2,v2 in v.items() if pd.isna(v2) is not True}
          for k,v in d.items()}
    

    【讨论】:

    • 嗨,关于数据透视表的问题。是否可以在 columnsvalues 等枢轴中使用 filter
    • @mozway 非常感谢!我在pivot_table中输入属性是错误的!我更喜欢第一个解决方案。再次感谢!
    • @Greencolor filter 是什么意思?你能提供一个例子(或提出一个新问题)吗?
    • @Vallinox 不客气!
    • @mozway 另一方面,如果某些尾部没有关系,我该如何从字典中删除它?
    猜你喜欢
    • 1970-01-01
    • 2020-05-19
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2014-09-28
    • 2020-03-09
    相关资源
    最近更新 更多