使用Pandas数据框中的填充行填充缺失数据

时间:2017-07-04 17:08:10

标签: python pandas missing-data

我的数据框缺少特定列中的数据。举一个具体的例子,请将其作为df。

my_list = ["A", " ",31, "A", 5,32, " " ,5, 35, "B", " " , 14, "B", 4, 23, " " , 4, 26, "B", 7, 25, " ", 7, 15]
df = pd.DataFrame(np.array(my_list).reshape(8,3), columns = list("xyz"))

看起来像

   x  y   z
0  A     31
1  A  5  32
2     5  35
3  B     14
4  B  4  23
5     4  26
6  B  7  25
7     7  15

缺失的数据可能不一定像上面那样方便。

我想要做的是填充列x中的所有空单元格,同时填充列x和y。在上面的df中,对于行1,y = 5与x =" A"相关联。因此,当我进入第2行时,我将使用" A"填充x。 x到y的关系应该是一对多的。因此,y的不同值可以与x的相同值相关联。但是,y到x的关系应该是唯一的。期望的最终结果是

   x  y   z
0  A     31
1  A  5  32
2  A  5  35
3  B     14
4  B  4  23
5  B  4  26
6  B  7  25
7  B  7  15

我在这里有两个问题:

  1. 如何检查x-to-y确实是一对多的关系?
  2. 如果关系成立,我如何填充x列中缺少的单元格,其中x和y都填充了参考行?
  3. 我尝试循环遍历行并拾取x和y列值以形成字典,其中y是键,x是值。然后使用字典,我再次循环数据框以填充列x。是否有更多Pandas有效的方法呢?

1 个答案:

答案 0 :(得分:2)

如何对y进行分组并更改x值,并将df的值设为x == ' '

In [31]: df.loc[df.x == ' ', 'x'] = df.groupby(['y'])['x'].transform('shift')

In [32]: df
Out[32]:
   x  y   z
0  A     31
1  A  5  32
2  A  5  35
3  B     14
4  B  4  23
5  B  4  26
6  B  7  25
7  B  7  15