【发布时间】:2019-08-23 12:35:05
【问题描述】:
我有两个 DataFrame,它们具有相同的列名,并且每一行都有唯一的 Import_ID。我想基于相同的 Import_ID 将 df1 到 df2 的 2 列中的缺失值导入。
我已经为一列执行此操作并且效果很好,但我想同时为两列执行此操作。 对于我写的一篇专栏文章:
df2.loc[(numpy.isnan(df2['DeliveryNoteNo']))& (~numpy.isnan(df1['DeliveryNoteNo'])), 'DeliveryNoteNo'] = df2['Import_ID'].map(df1.set_index('Import_ID')['DeliveryNoteNo'])
这很好用,所以我想对 2 列做同样的事情,这样每次我做更新时都会做 df2 它也会给出更新的日期。
我试过这个,但它只返回一个错误:“TypeError: 'DataFrame' object is not callable”
df2.loc[(numpy.isnan(df2.InvoiceNo))& (~numpy.isnan(df1['InvoiceNo'])), ['InvoiceNo','Modified_Date']] = df2['Import_ID'].map(df1.set_index('Import_ID')[['InvoiceNo', 'Modified_Date']])
例如: df1:
InvoiceNo OrderNo DeliveryNoteNo Modified_Date Import_ID
0 950094591.0 7027514279 1.000000e+00 23-08-2019 14:30 7027514279_100
1 950094591.0 7027514279 2.000000e+00 23-08-2019 14:30 7027514279_100.1
2 7027514279 23-08-2019 14:30 7027514279_100.2
df2:
InvoiceNo OrderNo DeliveryNoteNo Modified_Date Import_ID
0 7027514279 1.000000e+00 21-08-2019 14:30 7027514279_100
1 950094591.0 7027514279 21-08-2019 14:30 7027514279_100.1
2 7027514279 21-08-2019 14:30 7027514279_100.2
df2 稍后应如下所示:
InvoiceNo OrderNo DeliveryNoteNo Modified_Date Import_ID
0 950094591.0 7027514279 1.000000e+00 23-08-2019 14:30 7027514279_100
1 950094591.0 7027514279 2.000000e+00 23-08-2019 14:30 7027514279_100.1
2 7027514279 21-08-2019 14:30 7027514279_100.2
【问题讨论】:
-
你试过合并吗?
-
是的,我尝试了合并,它只显示了 df1 行,并且没有一个与 df1 不同的 df2
-
您的示例数据帧上没有
importID,对吗?还是只是索引?如果是这种情况,请使用df2.combine_first(df1) -
我忘记将它添加到示例中,有 20 多个不同的列,由于我正在处理这 4 个列,所以我忘记添加它,..我现在更新了我的问题