我想将两个数据帧组合在一起,并将左数据帧的数据优先于右数据帧:
我目前有:
(Pdb) pp question_struct
QuestionID RowID MenuID ColumnID SourceRowID SourceColumnID SourceVariationID
0 316926394 3029937752 0 0 3029937752 0 0
1 316926394 3029937753 0 0 3029937753 0 0
2 316926394 3029937754 0 0 3029937754 0 0
3 316926394 3029937755 0 0 3029937755 0 0
4 316926394 3029937756 0 0 3029937756 0 0
5 316926394 3029937757 0 0 3029937757 0 0
[6 rows x 7 columns]
(Pdb) pp df
QuestionID RowID ColumnID MenuID SourceRowID SourceColumnID SourceVariationID ResponseCount
0 316926394 3029937753 0 0 3029937753 0 0 1
[1 rows x 8 columns]
(Pdb) df.combine_first(question_struct)
ColumnID MenuID QuestionID ResponseCount RowID SourceColumnID SourceRowID SourceVariationID
0 0 0 316926394 1 3029937753 0 3029937753 0
1 0 0 316926394 NaN 3029937753 0 3029937753 0
2 0 0 316926394 NaN 3029937754 0 3029937754 0
3 0 0 316926394 NaN 3029937755 0 3029937755 0
4 0 0 316926394 NaN 3029937756 0 3029937756 0
5 0 0 316926394 NaN 3029937757 0 3029937757 0
[6 rows x 8 columns]
但是它丢失了问题结构3029937752的第一行,即使它与df中的任何内容都不冲突,并且复制了3029937753,后者确实冲突。你知道吗
^{} 只是匹配索引,而不是值(就像合并一样),并更新这些行中的nan。如果在
question_struct
中有额外的列,或者在df
中有nan,那么这些列将被合并到新的数据帧中,因为您不需要,所以它不会提取任何内容。你知道吗下面是一个例子来解释发生了什么:
请注意5不包括在内,因为
df1
已经有了行1的列B的值。如果我们先把3变成NaN,那么它将使用5:
相关问题 更多 >
编程相关推荐