在Pandas数据帧中将数据拆分并映射到两列

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上使用split,然后创建一个以A中的值为键,B中的值为值的dict列。然后可以将此列转换为数据框。 谢谢


1
肯定有一种情况,展示你尝试过的内容会有所帮助。请阅读http://stackoverflow.com/help/how-to-ask。 - piRSquared
@piRSquared 希望这些编辑能有所帮助... - nilesh
2个回答

3
使用 OrderedDict 来保留一个基于 ":" 分隔并扁平化成一个 list 的 dataframe 两列的映射关系后的顺序。稍后将其提供给 dataframe 构造函数。
from collections import OrderedDict

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

enter image description here


@nilesh 完全可以导入并使用OrderedDict。这是一个更快的答案。我认为这也更合适。 - piRSquared

2
  • 我将通过':'分离所有内容。但是有两列数据。如果我先进行stack操作,我将获得一系列数据,可以更轻松地使用str.split
  • 现在,我有了一个分离的系列,我可以通过level = 0对其进行分组,这是原始索引。
  • 我使用zipdict来获取类似于系列的结构,其中原始列A为索引,B为值。
  • unstack,完成。
gb = dfc.stack().str.split(':').groupby(level=0)
gb.apply(lambda x: dict(zip(*x))).unstack()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接