我有一个数据帧,我需要根据条件访问和替换某些单元格值:
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()
进行头脑风暴,但似乎没有任何工作。虽然我能够访问需要更改的单个元素,但我无法实现在整个数据帧中检查此类条件并修改元素的有效方法。
答案 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