迭代以填充空白熊猫



我有一个表,我想在其中填充一些空值,作为列之间的条件。桌子的一部分看起来像这样:

Col_Cfotsodcr南
ID_A Col_A Col_B
X 1 a NaN
X 2 g
X 3
Y 4 a
Y 5 e

这比我想象的要难!这里有一种暴力的方法:

import pandas as pd
import numpy as np
df = pd.DataFrame({'Master': ['X','X','X','Y','Y'],
'ID_A': range(1,6),
'Col_A': ['a','g','t','a','e'],
'Col_B': [np.nan,'f','s','d','r'],
'Col_C': [np.nan,'o','o','c',np.nan]})
master_vals = df['Master'].unique()
for val in master_vals:
df_master = df[df['Master'] == val]
for row in df_master.index:
counter = 0
for col in ['Col_A','Col_B','Col_C']:
if pd.isnull(df_master.loc[row,col]):
full_df = df_master.dropna()
index = full_df.index
df.loc[row,col] = full_df.loc[index[0]+counter,'ID_A']
counter += 1

对于我们的每个主值[X,Y],我们只从数据帧中选择df_master中的那些行。然后在df_master中遍历我们关心的行和列,查找NaN。如果我们找到一个,那么我们搜索full_df(df_master中不包含任何NaN的部分(,并使用计数器选择适当的值来帮助索引。这给我们留下了:

df
Master  ID_A    Col_A   Col_B   Col_C
0   X       1       a       2       3
1   X       2       g       f       o
2   X       3       t       s       o
3   Y       4   a   d   c
4   Y       5   e   r   4

如果您的数据集很大,这种方法可能会非常缓慢,并且可能会产生意外行为,除非您的数据结构与给定的示例完全相同。也许使用groupbystack可以更好地完成整个任务,但我无法让它们发挥作用。

相关内容

  • 没有找到相关文章

最新更新