2017-03-17 96 views
2

在下面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这些值需要转换为列表。

感谢,

回答

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] 
+0

我想我很困惑你与我期待的输出。实际上,我希望'alfa_id'和others_id以有效的内存方式回到'dataframe'中。 – everestial007