在以下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
值。谢谢,
最佳答案
设定
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]