如何将pandas中的特定列值转换为列表?

时间:2017-03-17 20:39:33

标签: python list pandas dataframe

在以下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值。

谢谢,

1 个答案:

答案 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]