我有脚本将文件(df4)中的值填入现有数据框(df3)。但是dataframe df3已经包含已填充值的列,并且使用以下脚本将这些现有值设置为“NaN”:
df5 = df4.pivot_table(index='source', columns='plasmidgene', values='identity').reindex(index=df3.index, columns=df3.columns)
如何避免覆盖现有值?感谢
例如,我有df1
a b c d e f
1 1 30 Nan Nan Nan Nan
2 2 3 Nan Nan Nan Nan
3 16 1 Nan Nan Nan Nan
DF2
1 1 d 80
2 2 e 90
3 3 c 60
我想创建这个
a b c d e f
1 1 30 Nan 80 Nan Nan
2 2 3 Nan Nan 90 Nan
3 16 1 60 Nan Nan Nan
答案 0 :(得分:0)
我认为您可以使用combine_first
:
df = df2.pivot_table(index='source', columns='plasmidgene', values='identity') \
.reindex(index=df1.index, columns= df1.columns) \
.combine_first(df1)
print (df)
a b c d e f
1 1.0 30.0 NaN 80.0 NaN NaN
2 2.0 3.0 NaN NaN 90.0 NaN
3 16.0 1.0 60.0 NaN NaN NaN
print (df.dtypes)
a float64
b float64
c float64
d float64
e float64
f float64
dtype: object
对于fillna
,这是有问题的 - 不会将dtypes更改为float64
,所以不要使用它 - 它看起来像bug:
df = df2.pivot_table(index='source', columns='plasmidgene', values='identity') \
.reindex(index=df1.index, columns= df1.columns) \
.fillna(df1)
print (df)
a b c d e f
1 1 30 NaN 80 NaN NaN
2 2 3 NaN NaN 90 NaN
3 16 1 60 NaN NaN NaN
print (df.dtypes)
a object
b object
c object
d object
e object
f object
dtype: object