pandas 之 combine 详解,如果 df 不存在、other 中存在,会如何处理

本文深入探讨了Pandas的`combine`方法,解析了当DataFrame `df`中数据缺失,而`other`中存在数据时的处理方式。通过实例展示如何巧妙地合并与填充数据,对于理解和使用Pandas数据处理功能具有重要意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、语法:
df.combine(other: 'DataFrame', func, fill_value=None, overwrite=True) 
2、举例:
df1 = pd.DataFrame({'A': [1, 1], 'B': [4, 4]})
df2 = pd.DataFrame({'B': [3, 3], 'C': [1, 1], }, index=[1, 2])

df1
Out[74]: 
   A  B
0  1  4
1  1  4

df2
Out[75]: 
   B  C
1  3  1
2  3  1

take_smaller = lambda x, y: x if x.sum() < y.sum() else y
"""对于 df 中不存在的列,结果为 NaN"""
df1.combine(df2, take_smaller, overwrite=False)  # df1 中不存在 C,返回 NaN
Out[78]: 
     A    B   C
0  1.0  NaN NaN
1  1.0  3.0 NaN
2  NaN  3.0 NaN

df2.combine(df1, talke_smaller, overwrite=False)  # df2 中不存在 A,返回 NaN
Out[79]: 
    A    B    C
0 NaN  NaN  NaN
1 NaN  3.0  1.0
2 NaN  3.0  1.0
"""
	参数 overwrite:默认为 True
		当 df 中存在、other 中不存在时,
		可以通过该参数确定是否使用 other 的值填充 df
"""
df1.combine(df2, talke_smaller)  # df2 中 A 为空,所以结果中 A 为 NaN  
Out[80]: 
    A    B   C
0 NaN  NaN NaN
1 NaN  3.0 NaN
2 NaN  3.0 NaN

df2.combine(df1, talke_smaller)  # df1 中 C 为空,所以结果中 C 为 NaN  
Out[81]: 
    A    B   C
0 NaN  NaN NaN
1 NaN  3.0 NaN
2 NaN  3.0 NaN
"""
	参数 fill_value:默认为 None
		用于填充缺失的值,以及结果中 “除去” 设置了 overwrite=False 列的空值
"""
df1.combine(df2, talke_smaller, overwrite=False, fill_value=999)
Out[93]: 
     A      B      C
0  1.0  999.0  999.0
1  1.0    3.0    1.0
2  NaN    3.0    1.0

df2.combine(df1, talke_smaller, overwrite=False, fill_value=999)
Out[90]: 
       A      B    C
0    1.0  999.0  NaN
1    1.0    3.0  1.0
2  999.0    3.0  1.0

#################################################################################

df1.combine(df2, talke_smaller, fill_value=999)
Out[94]: 
       A      B      C
0    1.0  999.0  999.0
1    1.0    3.0    1.0
2  999.0    3.0    1.0

df2.combine(df1, talke_smaller, fill_value=999)
Out[96]: 
       A      B      C
0    1.0  999.0  999.0
1    1.0    3.0    1.0
2  999.0    3.0    1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值