我有一个大数据框(大约 800,000 行)。近 30% 的行具有 NaN 值,例如,
test = pd.DataFrame({"name": [1,2,3,4,5,6,7],
"col1": ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7'],
"col2": [4, 5, 6, np.nan, np.nan, 8, 5],
"col3": [7, 8, 9, np.nan, np.nan, 3, 7],
"col4": [7, 8, 9, np.nan, np.nan, 2, 6]})
name col1 col2 col3 col4
0 1 c1 4.0 7.0 7.0
1 2 c2 5.0 8.0 8.0
2 3 c3 6.0 9.0 9.0
3 4 c4 NaN NaN NaN
4 5 c5 NaN NaN NaN
5 6 c6 8.0 3.0 2.0
6 7 c7 5.0 7.0 6.0
现在我在 row3 和 row4 中有 NaN。
根据一些规则,我得到 row3 最相似的行是
similar_for_row3 = ['name' = 10, 'name' = 3, 'name' = 1]
而对于 row4 是
similar_for_row4 = ['name' = 2, 'name' = 6, 'name' = 20].
然后,我的问题是:
我怎么可以快速检查,如果这些行中similar_for_row3,并similar_for_row4在数据帧,例如,'name' = 10而'name' = 20不是它。
快速用NaN相似行中的值替换一行中的值。例如,对于row3,我们首先检查 中的所有行similar_for_row3,然后使用 Dataframe 中存在的第一行(即test.loc[test['name' == 3]])来替换NaN中的row3。
输出是:
name col1 col2 col3 col4
0 1 c1 4.0 7.0 7.0
1 2 c2 5.0 8.0 8.0
2 3 c3 6.0 9.0 9.0
3 4 c4 6.0 9.0 9.0 -> replace NaN with 'name' = 3
4 5 c5 NaN NaN NaN
5 6 c6 8.0 3.0 2.0
6 7 c7 5.0 7.0 6.0
我试图用“for 循环”迭代所有数据帧来替换 NaN 值,但速度很慢。更换一行大约需要 3 秒钟。我的数据集有 800,000 行。这将花费我一个月的时间来完成。请帮忙!
吃鸡游戏
相关分类