我想合并'key 1'和'key 2'列上的两个数据集,以便在缺少值的情况下,例如在'key 2'列中,它将采用属于第一个键的第二个键的所有组合。
def merge_nan_as_any(mask, data, on, how)
...
mask = pd.DataFrame({'key1': [1,1,2,2],
'key2': [None,3,1,2],
'value2': [1,2,3,4]})
data = pd.DataFrame({'key1': [1,1,1,2,2,2],
'key2': [1,2,3,1,2,3],
'value1': [1,2,3,4,5,6]})
result = merge_nan_as_any(mask, data, on=['key1', 'key2'], how='left')
result = pd.DataFrame({'key1': [1,1,1,1,2,2],
'key2': [1,2,3,3,1,2],
'value2': [1,1,1,2,3,4],
'value1': [1,2,3,3,4,5]})
第二个键缺少一个值,因此它从第二个数据集中获取满足以下条件的所有行:key 1必须等于1,key 2是第二个数据集中的任意第二个键值。怎么做?
我想到的第一个明显的解决方案是迭代第一个数据集,并过滤出满足条件的组合,第二个是将第一个数据集拆分为几个数据集,使它们在相同的列中具有NaN,并在具有值的列中合并每个数据集。
但我不喜欢这些解决方案,我想还有更优雅的方法来做我想做的事情。
我将感激任何帮助!
3条答案
按热度按时间92dk7w1h1#
简单的方法,针对非NaN值合并key1/key2,仅针对NaN值合并key1,并且
concat
:输出:
xnifntxz2#
开始,我会用另一个 Dataframe 中所有唯一值的列表填充空值;然后,分解它以获得所有可能的组合并转换回数值;最后,将它们合并以获得预期的输出:
输出:
nimxete23#
使用pandasql会很容易:
输出: