2017-03-17 80 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