在以下pandas Dataframe:
alfa alfa_id beta beta_id
ak 23 ji 24
bc 24 kl 25
我想将列alfa and beta
转换为列表。
cols = [l for l in df.columns.values if not l.endswith('id')]
df = df[cols].applymap(lambda c:[list(c)])
# gives me
我现在收到的输出:
print(df)
alfa beta
[[a, k]] [[j, i]]
**但是,预期的输出是:**
alfa alfa_id beta beta_id
[[a, k]] 23 [[j, i]] 24
alfa_id and beta_id
的列已丢失,但我想将它们放回一行代码中(尽可能简单)。 PS说明:我本可以做到
df = df.applymap(lambda c:[list(c)] if type(c) is str else c)
但是,我不想要这个,因为会有一些其他列不应该转换为列表。所以,我想特意制作需要转换为列表的cols
值。
谢谢,
答案 0 :(得分:2)
设置
cols = ['alfa', 'beta']
新答案
df.assign(**df[cols].stack().apply(list).unstack().to_dict('list'))
alfa alfa_id beta beta_id
0 [a, k] 23 [j, i] 24
1 [b, c] 24 [k, l] 25
旧答案
选项1
df[cols].applymap(list)
选项2
df[cols].stack().apply(list).unstack()
产量
alfa beta
0 [a, k] [j, i]
1 [b, c] [k, l]