通过广播系列更新数据帧值

时间:2016-11-05 15:37:17

标签: python pandas numpy dataframe

尝试使用系列中的值更新数据框的一部分。

np.random.seed(1)
df = pd.DataFrame(np.random.randint(1,100,(5,5)),columns =list('ABCDE'))
print df


    A   B   C   D   E
0  38  13  73  10  76
1   6  80  65  17   2
2  77  72   7  26  51
3  21  19  85  12  29
4  30  15  51  69  88

有一系列:

ser = pd.Series(index =list('CBADE'),data = range(-5,0))

C   -5
B   -4
A   -3
D   -2
E   -1
dtype: int64

让我们进行更新

criteria = df['A'] < 25

criteria:
0    False
1     True
2    False
3     True
4    False

尝试:

df[criteria] = ser
df.loc[criteria,:] = ser
etc.

期望的输出:

     A   B   C   D   E
0  38  13  73  10   76
1  -3  -4  -5  -2   -1
2  77  72   7  26   51
3  -3  -4  -5  -2   -1
4  30  15  51  69   88

我希望使用布尔条件和广播来尊重列索引和忽略行索引。

2 个答案:

答案 0 :(得分:4)

你可以试试这个:

df.loc[criteria, ser.index] = ser[np.newaxis, :]

这确保了正确的广播(np.newaxis)并且该列索引得到遵守(通过指定ser.index)。

答案 1 :(得分:2)

您可以fillna使用系列作品 您可以df np.nanmask一起使用 这工作

df.mask(criteria).fillna(ser)

enter image description here