【问题标题】:DataFrame conversion with combining multiple columns as a single array column将多列组合为单个数组列的 DataFrame 转换
【发布时间】:2021-09-30 20:13:08
【问题描述】:

我是 python 新手。我在 Python 3.7.4 版中有一个如下的熊猫数据框(有 4 列):

df = pd.DataFrame({'Patient_Key': [2333836, 2319735],
                   'DX1': ["N184", 'Z6827'],
                   'DX2': ['D649', 'N184'],
                   'DX3': ['E785', 'I10']})
   Patient_Key    DX1   DX2   DX3
0      2333836   N184  D649  E785
1      2319735  Z6827  N184   I10

我们如何将其转换为只有 2 列的新数据框?

-- Expected Conversion
2333836, ["N184", "D649", "E785"]
2319735, ["Z6827", "N184", "I10"]

【问题讨论】:

标签: python pandas


【解决方案1】:

过滤DX 列并将每一行转换为带有apply 的列表:

df[['Patient_Key']].join(
  df.filter(regex='DX').apply(pd.Series.tolist, 1).rename('DX')
)

   Patient_Key                  DX
0      2333836  [N184, D649, E785]
1      2319735  [Z6827, N184, I10]

或者将DX列子数据框转换为列表,然后将其分配给列:

df['DX'] = df.filter(regex='DX').values.tolist()
df[['Patient_Key', 'DX']]

   Patient_Key                  DX
0      2333836  [N184, D649, E785]
1      2319735  [Z6827, N184, I10]

【讨论】:

  • 你可以直接用list代替pd.Series.tolist
  • @Ch3steR 是的。 list 也可以,在这里更简洁。
  • 可能是显示问题。您需要将列作为字符串类型还是需要将其作为写入 csv 时的格式?
  • 如果你需要它作为一个字符串,那么你可以json.dumps这个列表,我相信。比如:import json; df.filter(regex='DX').apply(lambda s: json.dumps(s.to_list()), 1)
  • @LCJ 那你可以试试df['DX'] = df['DX'].astype('str') 把它变成一个字符串。
猜你喜欢
  • 2016-07-30
  • 2019-07-22
  • 1970-01-01
  • 2015-12-30
  • 2020-04-06
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多