在pandas dataframe(python)中迭代和编辑

时间:2014-05-01 12:11:46

标签: pandas

我需要修改我的pandas数据帧的一列,具体取决于另一列的布尔值。假设我有一列值,一列是真/假,我想将1与这些值相加,并且相应的bool为true。我尝试使用iterrows,但这会复制数据框并且不会对其进行修改。

谢谢!

输入:

   val    bool
a   1.0   true
b   2.3   false
...

输出:

   val    bool
a  2.0    true
b  2.3    false

1 个答案:

答案 0 :(得分:0)

使用loc创建布尔掩码并使用此掩码更新值,例如:

In [157]:

df = pd.DataFrame({'a':np.random.randn(5), 'b':[True,False,True,True,False]})
df

Out[157]:
          a      b
0 -1.666632   True
1  1.518392  False
2 -0.340623   True
3 -0.233279   True
4 -0.169503  False

[5 rows x 2 columns]
In [158]:
# determine the locations where we have a True value for the boolean mask
df.loc[df.b==True,'a']
Out[158]:
0   -1.666632
2   -0.340623
3   -0.233279
Name: a, dtype: float64
In [159]:
# now add one
df.loc[df.b==True,'a'] += 1
In [160]:

df
Out[160]:
          a      b
0 -0.666632   True
1  1.518392  False
2  0.659377   True
3  0.766721   True
4 -0.169503  False

[5 rows x 2 columns]