通过从右表中采样来填充左连接的 NaN 值

罗斯

我无法找到一种很好的熊猫式方法来通过从右表中采样来填充左连接缺失的 NaN 值。

例如joined_left = left.merge(right, how="left", left_on=[attr1], right_on=[attr2]) 从左到右

   0  1  2
0  1  1  1
1  2  2  2
2  3  3  3
3  9  9  9
4  1  3  2

   0  1  2
0  1  2  2
1  1  2  3
2  3  2  2
3  3  2  9
4  3  2  2

产生像

   0  1_x  2_x  1_y  2_y
0  1    1    1  2.0  2.0
1  1    1    1  2.0  3.0
2  2    2    2  NaN  NaN
3  3    3    3  2.0  2.0
4  3    3    3  2.0  9.0
5  3    3    3  2.0  2.0
6  9    9    9  NaN  NaN
7  1    3    2  2.0  2.0
8  1    3    2  2.0  3.0

如何从右表中采样一行而不是填充 NaN?

这是我到目前为止尝试过的操场

left = [[1,1,1], [2,2,2],[3,3,3], [9,9,9], [1,3,2]]
right = [[1,2,2],[1,2,3],[3,2,2], [3,2,9], [3,2,2]]
left = np.asarray(left)
right = np.asarray(right)
left = pd.DataFrame(left)
right = pd.DataFrame(right)
joined_left = left.merge(right, how="left", left_on=[0], right_on=[0])

while(joined_left.isnull().values.any()):
    right_sample = right.sample().drop(0, axis=1)
    joined_left.fillna(value=right_sample, limit=1)

print joined_left

基本上随机采样并使用 fillna() 首次出现 NaN 值来填充......但由于某种原因我没有得到任何输出。

谢谢!

输出之一可能是

   0  1_x  2_x  1_y  2_y
0  1    1    1  2.0  2.0
1  1    1    1  2.0  3.0
2  2    2    2  2.0  2.0
3  3    3    3  2.0  2.0
4  3    3    3  2.0  9.0
5  3    3    3  2.0  2.0
6  9    9    9  3.0  2.9
7  1    3    2  2.0  2.0
8  1    3    2  2.0  3.0

与采样3 2 23 2 9

贝尼

使用samplefillna

joined_left = left.merge(right, how="left", left_on=[0], right_on=[0],indicator=True) # adding indicator
joined_left
Out[705]: 
   0  1_x  2_x  1_y  2_y     _merge
0  1    1    1  2.0  2.0       both
1  1    1    1  2.0  3.0       both
2  2    2    2  NaN  NaN  left_only
3  3    3    3  2.0  2.0       both
4  3    3    3  2.0  9.0       both
5  3    3    3  2.0  2.0       both
6  9    9    9  NaN  NaN  left_only
7  1    3    2  2.0  2.0       both
8  1    3    2  2.0  3.0       both
nnull=joined_left['_merge'].eq('left_only').sum() # find all many row miss match , at the mergedf
s=right.sample(nnull)# rasmple from the dataframe after dropna 
s.index=joined_left.index[joined_left['_merge'].eq('left_only')] # reset the index of the subset fill df to the index of null value show up 
joined_left.fillna(s.rename(columns={1:'1_y',2:'2_y'})) 
Out[706]: 
   0  1_x  2_x  1_y  2_y     _merge
0  1    1    1  2.0  2.0       both
1  1    1    1  2.0  3.0       both
2  2    2    2  2.0  2.0  left_only
3  3    3    3  2.0  2.0       both
4  3    3    3  2.0  9.0       both
5  3    3    3  2.0  2.0       both
6  9    9    9  2.0  3.0  left_only
7  1    3    2  2.0  2.0       both
8  1    3    2  2.0  3.0       both

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据条件填充Nan值

来自分类Dev

从集合中删除NaN值

来自分类Dev

C ++中不同的NaN值

来自分类Dev

更改熊猫中的 nan 值

来自分类Dev

如何通过从一列中选择NaN值来创建数据框的子集?

来自分类Dev

分组后在熊猫中填充NaN值

来自分类Dev

用通用值填充DataFrame中的NaN值

来自分类Dev

通过从现有值的分布中采样来估算缺失值

来自分类Dev

将Pandas DataFrame中的列值与“ NaN”值连接

来自分类Dev

将Pandas DataFrame中的列值与“ NaN”值连接

来自分类Dev

如何根据前几列填充NaN值

来自分类Dev

在Python中用相应的行值填充NaN

来自分类Dev

熊猫用列值填充NaN

来自分类Dev

根据非NaN列的值有条件地在Pandas DataFrame中填充NaN值

来自分类Dev

如何用线连接非Nan值?

来自分类Dev

从python中的字典中删除Nan值

来自分类Dev

从C中的数组中消除NaN值

来自分类Dev

如何计算pandas DataFrame中的nan值?

来自分类Dev

从字典,Python的列表值中摆脱“ nan”

来自分类Dev

如何用NaN替换熊猫中的值?

来自分类Dev

角向输入中显示NaN值

来自分类Dev

在NaN之后选择ndarray中的值

来自分类Dev

在Go中解析JSON'NaN'值

来自分类Dev

在matplotlib中为NaN值设置颜色

来自分类Dev

TensorFlow中损失函数(MSE)的NaN值

来自分类Dev

计算数据框中的NaN值

来自分类Dev

从列中获取不是nan值的数据

来自分类Dev

jQuery中的Nan以查看多个行值

来自分类Dev

在忽略nan的列表中插入值