Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换因合并而丢失的值_Python_Pandas_Merge - Fatal编程技术网

Python 替换因合并而丢失的值

Python 替换因合并而丢失的值,python,pandas,merge,Python,Pandas,Merge,df1 df2 Merged=df1.mergedf2,how=left,on=Invoice |Invoice # |Date |Amount |12 |1/16/2016 |$10 |14 |1/17/2016 |$12 我想做的是将在合并中返回NaN值的发票13放入列表中。有什么想法吗?您的合并结果没有显示左合并的实际情况 以下是我在尝试复制我认为您正在尝试做的事情时得到的结果我使用的是pandas版本0.19.0: |Invo

df1

df2

Merged=df1.mergedf2,how=left,on=Invoice

|Invoice #  |Date        |Amount
|12         |1/16/2016   |$10 
|14         |1/17/2016   |$12 

我想做的是将在合并中返回NaN值的发票13放入列表中。有什么想法吗?

您的合并结果没有显示左合并的实际情况

以下是我在尝试复制我认为您正在尝试做的事情时得到的结果我使用的是pandas版本0.19.0:

|Invoice #  |Date         |Amount
|12         |12/15/2015   |$10
|NaN        |NaN          |NaN
|14         |1/17/2016    |$12
然后,您可以通过缺少的值进行屏蔽,并获得包含这些行的数据帧:

merged = df1.merge(df2, how='left', on='Invoice #')
或者只创建一个带有布尔标志的列:

merged[merged['Amount_y'].isnull()]
要从屏蔽数据框中选择内容,请将其与任何其他数据框一样对待,并通过列出它们将其索引到一列或多列中。注意,如果需要多列,则必须使用双括号

如果您想用它做其他事情,可以将它保存到一个新变量中,以简化语法

方法1 pd.concat+放置重复件

方法2 先合并

方法3 合并

方法4 加入

全部生产

时机 pd.concat+drop_副本速度最快


你能澄清一下吗?你的意思是说你正在以这种方式进行合并,或者你只是想要一个不在df1和df2之间共享的发票列表?我只是想要一个在df1中但不在df2中的发票列表。谢谢无论如何,我可以抓取相应的发票和发票日期与发票一起13我指的是发票金额和发票日期。我想把这些信息放在一起。编辑我的答案,让它更清楚地说明这里实际发生了什么,这样你就可以理解如何使用输出。希望有帮助。
merged[merged['Amount_y'].isnull()]
merged['missing_from_df2'] = merged['Amount_y'].isnull()
pd.concat([df1, df2]).drop_duplicates(subset=['Invoice #'])
df1.set_index('Invoice #').combine_first(df2.set_index('Invoice #')).reset_index()
df1.merge(df2, on='Invoice #', suffixes=['', '_'], how='left')[df1.columns]
df1.join(df2.set_index('Invoice #'), on='Invoice #', rsuffix='_')[df1.columns]