gpt4 book ai didi

python - 合并列和行

转载 作者:行者123 更新时间:2023-12-05 06:32:04 25 4
gpt4 key购买 nike

我正在尝试使用 python 制作大型数据框。我有大量具有不同行名和列名的小数据框,但行名和列名之间存在一些重叠。我试图做的是从一个小数据框开始,然后一个一个地添加其他数据框。

每个特定的行-列组合都是唯一的,最后可能会有很多 NA。

我已经尝试通过 pandas 的合并来执行此操作,但这会导致数据框比我需要的大得多,行和列名称被复制而不是合并。如果我能找到一种方法让 pandas 意识到 NaN 不是一个值并在添加新的小数据帧时覆盖它,我想我会得到我想要的结果。我也愿意尝试一些不使用 pandas 的东西。

For example:
DF1 A B
Y 1 2
Z 0 1


DF2 C D
X 1 2
Z 0 1

Merged: A B C D
Y 1 2 NA NA
Z 0 1 0 1
X NA NA 1 2

And then a new dataframe has to be added:
DF3 C E
Y 0 1
W 1 1

The result should be:
A B C D E
Y 1 2 0 NA 1
Z 0 1 0 1 NA
X NA NA 1 2 NA
W NA NA 1 NA 1

But what happens is:
A B C_x C_y D E
Y 1 2 NA 1 NA 1
Z 0 1 0 0 1 NA
X NA NA 1 1 2 NA
W NA NA 1 1 NA 1

最佳答案

你想使用 DataFrame.combine_first,它会根据索引对齐 DataFrame,并优先考虑左侧 DataFrame 中的值,同时使用右侧 DataFrame 中的值来填充缺失值。

df1.combine_first(df2).combine_first(df3)

示例数据

import pandas as pd
df1 = pd.DataFrame({'A': [1,0], 'B': [2,1]})
df1.index=['Y', 'Z']

df2 = pd.DataFrame({'C': [1,0], 'D': [2,1]})
df2.index=['X', 'Z']

df3 = pd.DataFrame({'C': [0,1], 'E': [1,1]})
df3.index=['Y', 'W']

代码

df1.combine_first(df2).combine_first(df3)

输出:

     A    B    C    D    E
W NaN NaN 1.0 NaN 1.0
X NaN NaN 1.0 2.0 NaN
Y 1.0 2.0 0.0 NaN 1.0
Z 0.0 1.0 0.0 1.0 NaN

关于python - 合并列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51499723/

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