在以下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]

09-25 21:32