我有两个数据框A和B。A和B具有相同的索引和相同的列名。但是,它们的条目是不同的(值和NaN混杂在一起)。
我想将A和B合并到另一个具有相同索引和列的数据框C中。
让我们以A.iloc [1,2]为例,例如A的第一行和第三列。如果A中的该条目为NaN,但B中的该条目为99,我希望C.iloc [1,2]为99。如果它们都是NaN,则结果将为NaN。
如果它们都是两个值,例如23和99,我希望合并产生更大的数字(99),但是我需要将索引标记为错误。
我所做的:
使用行和列编写for循环,以在两个数据帧之间进行匹配。例如,如果某个条目在A中大于0,在B中大于0,则我将条目的索引存储在列表中,并在C中附加较大的值。这是非常低效的,我想使用更好的方法。 (加上它失败了,因为我是一个可怕的程序员)
尝试使用pandas.merge。我对合并过程不太了解,但是我尝试了几种类似pd.merge(A, B, left_on = A.index, right_on = B.index, how = 'outer', indicator = True)
的方法。它为我返回了一个数据帧,其中包含更多行,并且将其名称末尾附加x和y的列加倍。
有什么想法吗?
答案 0 :(得分:0)
因此,据我了解,您只想针对df1
值从df2
更新Non-Null
。
以下面的数据框为例:
In [1761]: df1
Out[1761]:
val1 val2 val3
0 NaN NaN 0.20
1 NaN 0.2 NaN
2 NaN NaN 0.13
3 NaN 50.0 0.40
In [1762]: df2
Out[1762]:
val1 val2 val3
0 99 0.10 NaN
1 99 NaN 0.10
2 99 NaN 0.13
3 99 50.00 0.40
因此,在上述情况下,将发生以下更新:
1。)val1
的{{1}}将更新df1
的列val1
的所有行,因为df2
对此具有所有非空值列。
2。)df2
的{{1}}仅更新val2
的列df1
的第一行,因为val2
的值为Non-Null此列的第一行。
3。)df2
的{{1}}仅更新df2
的列val3
的第二行,因为df1
的值为Non-Null此列的第二行。
注意:val3
的列df2
的第三行将不会更新,因为即使在df2
中它也具有NULL值。
下面是执行上述操作的代码:
val2
现在,df1
更新后的外观如下:
df2
我认为这可以解决您的问题。