【问题标题】:How to transform my dataframe in specific way? [closed]如何以特定方式转换我的数据框? [关闭]
【发布时间】:2021-04-02 12:56:09
【问题描述】:

我有一个数据框,每列包含所有二进制值:

col1    col2   col3  
1         0      1
1         0      1
1         1      1
0         0      0
1         0      0

我想将每一行转换为以列名作为键、值作为值的集合。所以想要的结果必须是这样的:

[{'col1:1', 'col2:0', 'col3:1'},
{'col1:1', 'col2:0', 'col3:1'},
{'col1:1', 'col2:1', 'col3:1'},
{'col1:0', 'col2:0', 'col3:0'},
{'col1:1', 'col2:0', 'col3:0'}]

我该怎么做?

【问题讨论】:

  • df.to_dict('records') ?
  • @DaniMesejo 不,它会给出 [{'col1':1, 'col2':0, 'col3':1},.....
  • 有什么区别?
  • 我需要 [{'col1:1', 'col2:0', 'col3:1'},.... 值在撇号中
  • @ALollz 是的。我编辑了问题,它的集合

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


【解决方案1】:

只要做:

res = [{f'{k}:{v}' for k, v in d.items()} for d in df.to_dict('records')]
print(res)

输出

[{'col1:1', 'col3:1', 'col2:0'}, {'col1:1', 'col3:1', 'col2:0'}, {'col1:1', 'col3:1', 'col2:1'}, {'col2:0', 'col1:0', 'col3:0'}, {'col1:1', 'col2:0', 'col3:0'}]

【讨论】:

    【解决方案2】:

    如果你想坚持使用 pandas,你可以radd 字符串然后应用 set。 (由于应用,可能会矫枉过正和缓慢)

    df.astype(str).radd(':').radd(df.columns).apply(set, axis=1).tolist()
    [{'col1:1', 'col2:0', 'col3:1'},
     {'col1:1', 'col2:0', 'col3:1'},
     {'col1:1', 'col2:1', 'col3:1'},
     {'col1:0', 'col2:0', 'col3:0'},
     {'col1:1', 'col2:0', 'col3:0'}]
    

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 2022-06-28
      • 2021-10-20
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多