根据一个或多个条件替换数据框列中的单元格

时间:2016-05-27 10:31:40

标签: python pandas

我有一个数据帧,我需要根据条件访问和替换某些单元格值:

entries_and_exits = pd.DataFrame({
  'ENTRIESn': [3144312, 3144335, 3144353, 3144424, 3144594,
             3144808, 3144895, 3144905, 3144941, 3145094],
  'EXITSn': [1088151, 0, 1088177, 1088231, 1088275,
           1088317, 1088328, 1088331, 1088420, 1088753],
  'Terminal': ['A', 'B','C','D','E','F','G','H','I','J']
})

我需要做的是我需要将'Exitsn'列中的值替换为0,如果它们不为零且终端列中的值为'A','B'或'G'。

知道怎么做吗?我现在一直在使用apply()applymap()where()replace()进行头脑风暴,但似乎没有任何工作。虽然我能够访问需要更改的单个元素,但我无法实现在整个数据帧中检查此类条件并修改元素的有效方法。

1 个答案:

答案 0 :(得分:0)

使用isin传递一个感兴趣的值列表来掩盖df,这将返回一个布尔掩码,您可以使用该掩码替换满足条件的值:

In [66]:
entries_and_exits.loc[entries_and_exits['Terminal'].isin(['A','B','G']), 'EXITSn'] = 0
entries_and_exits

Out[66]:
   ENTRIESn   EXITSn Terminal
0   3144312        0        A
1   3144335        0        B
2   3144353  1088177        C
3   3144424  1088231        D
4   3144594  1088275        E
5   3144808  1088317        F
6   3144895        0        G
7   3144905  1088331        H
8   3144941  1088420        I
9   3145094  1088753        J

打破上述情况:

In [70]:
entries_and_exits['Terminal'].isin(['A','B','G'])

Out[70]:
0     True
1     True
2    False
3    False
4    False
5    False
6     True
7    False
8    False
9    False
Name: Terminal, dtype: bool

In [71]:
entries_and_exits[entries_and_exits['Terminal'].isin(['A','B','G'])]

Out[71]:
   ENTRIESn  EXITSn Terminal
0   3144312       0        A
1   3144335       0        B
6   3144895       0        G