gpt4 book ai didi

python - 将 DataFrame 列拆分为两个 + MultiIndex

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:18 25 4
gpt4 key购买 nike

我有代表跨境人员的 DataFrame

flows = DataFrame([[1,2],[3,4]], index=['Monday', 'Tuesday'], columns=['CZ>DE', 'HU>AT'])

CZ>DE HU>AT
Monday 1 2
Tuesday 3 4

我想将每一列分成两列,表示每个边界的国家/地区增量/减量。我当前的代码和期望的结果是这样的

country_from = lambda x: x[:2]
country_to = lambda x: x[3:]
flows_from = -1*flows.copy()
flows_from.columns = pd.MultiIndex.from_tuples([(border, country_from(border)) for border in flows.columns])
flows_to = flows.copy()
flows_to.columns = pd.MultiIndex.from_tuples([(border, country_to(border)) for border in flows.columns])
country_flows = pd.concat([flows_from, flows_to], axis=1)
country_flows = country_flows.groupby(level=[0,1], axis=1).sum()

CZ>DE HU>AT
CZ DE AT HU
Monday -1 1 2 -2
Tuesday -3 3 4 -4

这个解决方案相当冗长,我怀疑它可以做得更好。有人有想法吗?

最佳答案

您可以创建定义 MultiIndex 级别的元组:

tuples = [(i,k) for i, j in zip(flows.columns,[i.split('>') for i in flows.columns]) for k in j]

x = flows.values

然后:

data = np.multiply(np.tile([-1,1], x.shape), np.repeat(x, 2, axis=1))

pd.DataFrame(data=data, index=flows.index, columns=pd.MultiIndex.from_tuples(tuples))

产量:

        CZ>DE    HU>AT   
CZ DE HU AT
Monday -1 1 -2 2
Tuesday -3 3 -4 4

关于python - 将 DataFrame 列拆分为两个 + MultiIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53104191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com