2016-12-29 262 views
4

欲在兩列數據從數據幀分割並使用該數據構造新的列的兩列的地圖數據。分裂,在大熊貓數據幀

我的數據幀,

dfc = pd.DataFrame({"A": ["GT:DP:RO:QR:AO:QA:GL", "GT:DP:RO:QR:AO:QA:GL", "GT:DP:RO:QR:AO:QA:GL", "GT:DP:GL", "GT:DP:GL"], "B": ["0/1:71:43:1363:28:806:-71.1191,0,-121.278", "0/1:71:43:1363:28:806:-71.1191,0,-121.278", "0/1:71:43:1363:28:806:-71.1191,0,-121.278", "1/1:49:-103.754,0,-3.51307", "1/1:49:-103.754,0,-3.51307"]}) 

我想從列名爲GT, DP, RO, QR, AO, QA, GL與價值觀單獨列B

我想產生作爲輸出, enter image description here

我們可以分割的兩列使用a = df.A.str.split(":", expand = True)b = df.B.str.split(":", expand = True)來獲得兩個單獨的數據幀。這些可以與c = pd.merge(a, b, left_index = True, right_index = True)合併以獲得所有期望的數據。但是,並非如預期的格式。 enter image description here

有什麼建議?我認爲,更好的辦法可以在兩列AB,然後從A創建dict柱值作爲重點,並作爲B值來使用split。然後這個列可以轉換爲數據幀。 謝謝

+1

肯定在那裏向我們展示你已經嘗試什麼可以幫助的情況。閱讀http://stackoverflow.com/help/how-to-ask – piRSquared

+0

@piRSquared希望編輯幫... – nilesh

回答

3

使用OrderedDict創建於九月「:」數據框分割的兩個有關柱,扁平的listdict映射後維持秩序。

飼料這對數據幀構造後。

from collections import OrderedDict 

L = dfc.apply(
    lambda x: OrderedDict(zip(x['A'].split(':'), x['B'].split(':'))), 1).tolist() 
pd.DataFrame(L) 

+0

@nilesh這是完全合理的進口和使用'OrderedDict'。這是一個更快的答案。我認爲這也更合適。 – piRSquared

2
  • 我打算把所有東西都拆分爲':'。但我有2列。首先,我得到一系列我可以更容易使用的系列str.split
  • 我現在有一個分割系列,我可以通過level=0這是最初的索引進行分組。
  • zipdict得到像作爲指標的原始列AB作爲價值結構系列。
  • unstack和我完成了。

gb = dfc.stack().str.split(':').groupby(level=0) 
gb.apply(lambda x: dict(zip(*x))).unstack() 

enter image description here