有条件地替换丢失的数据熊猫

时间:2014-08-07 08:04:27

标签: python pandas

说,我有两个数据集:

A:

ATime          X       Y      Z
1.2            2      15      2
1.4            3      12      1
1.5            1      10      6
1.6            2       9     10
1.9            1       1      9

B:

Btime         C       D      E
1.2           12      25     12
1.3           13      22     11
1.4           11      20     16
1.7           12      29     12
1.9           11      21     19
2.0           08      10     11
2.4           10      12     15

我正在合并到一个看起来像这样的数据集:

Btime         C       D      E         ATime          X       Y       Z
1.2           12      25     12          1.2           2      15      2         
1.3           13      22     11          1.4           1      10      6
1.4           11      20     16          1.5           2       9     10
1.7           12      29     12          1.6           1       1      9
1.9           11      21     19          1.9           0       0      0  
2.0           08      10     11           0            0       0      0 
2.4           10      12     15           0            0       0      0 

是否有一种简单的方法可以在Atime中用Btime中列出的时间(2.0,2.4)替换两个0?

...

现在我正在使用以下内容合并pandas中的两个数据集:

a = pd.read_csv("a")
b = pd.read_csv("b")
merged = a.join(b, how="outer")
filled = merged.fillna(0)

但这只是给了我0的情况。

2 个答案:

答案 0 :(得分:2)

是的,您可以将系列传递给fillna

merged["Atime"] = merged["Atime"].fillna(b.Btime)

答案 1 :(得分:0)

使用loc和布尔索引来选择值并分配回来:

In [327]:
# filter just those rows where 'ATime' is 0 and take the corresponding 'Btime' value
merged.loc[merged["ATime"] == 0, "ATime"] = merged["Btime"]
merged
Out[327]:
   ATime  X   Y   Z  Btime   C   D   E
0    1.2  2  15   2    1.2  12  25  12
1    1.4  3  12   1    1.3  13  22  11
2    1.5  1  10   6    1.4  11  20  16
3    1.6  2   9  10    1.7  12  29  12
4    1.9  1   1   9    1.9  11  21  19
5    2.0  0   0   0    2.0   8  10  11
6    2.4  0   0   0    2.4  10  12  15