gpt4 book ai didi

python - Pandas - 将缺失的列连接为 NaN

转载 作者:行者123 更新时间:2023-12-01 02:22:31 28 4
gpt4 key购买 nike

想象两个数据框:

X = pd.DataFrame([[1,2],[3,4],[5,6]], columns=["a", "b"])
Y = pd.DataFrame([10,20,30], columns=["a"])

>>> X
a b
0 1 2
1 3 4
2 5 6
>>> Y
a
0 10
1 20
2 30

总的来说,我希望我的最终输出是这样的:

   a_X  b_X  a_Y b_Y sum_a sum_b
0 1 2 10 NaN 11 2
1 3 4 20 NaN 23 4
2 5 6 30 NaN 35 6

我尝试这样做:

merged = X.join(Y, lsuffix="_X", rsuffix="_Y")
merged['sum_a'] = merged['a_X'] + merged['a_Y'] # works
merged['sum_b'] = merged['b_X'] + merged['b_Y'] # doesn't work

显然 sum_b 列将失败,因为 Y 集中没有 b 列。它可能存在,但不一定存在,我的数据集没有任何保证。我似乎无法使用内置联接来添加“NaN”列。

最佳答案

pd.concat 连接 -

k = ['X', 'Y']

df = pd.concat([X, Y], keys=k, axis=1)
df

X Y
a b a
0 1 2 10
1 3 4 20
2 5 6 30

生成 MultiIndex 并用它来重新索引 -

idx = pd.MultiIndex.from_product([k, df.columns.levels[1].unique()])
df = df.reindex(columns=idx)
df

X Y
a b a b
0 1 2 10 NaN
1 3 4 20 NaN
2 5 6 30 NaN

重新设置列名称 -

df.columns = df.columns.map('_'.join)
df

X_a X_b Y_a Y_b
0 1 2 10 NaN
1 3 4 20 NaN
2 5 6 30 NaN

现在,您可以按后缀分组并求和 -

v = df.groupby(by=lambda x: x.split('_')[1], axis=1).sum().add_prefix('sum_')
v

sum_a sum_b
0 11.0 2.0
1 23.0 4.0
2 35.0 6.0

将其与原始内容连接起来:

pd.concat([df, v], 1)

X_a X_b Y_a Y_b sum_a sum_b
0 1 2 10 NaN 11.0 2.0
1 3 4 20 NaN 23.0 4.0
2 5 6 30 NaN 35.0 6.0

关于python - Pandas - 将缺失的列连接为 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47797150/

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