根据条件修改数据框中的2列

时间:2018-11-02 20:15:38

标签: python pandas dataframe

我在Stack Overflow上看到了很多关于如何根据条件修改数据框中的单个列的示例,但是我无法弄清楚如何根据单个条件修改多个列。

如果我有根据以下代码生成的数据框-

import random
import pandas as pd

random_events = ('SHOT', 'MISSED_SHOT', 'GOAL')
events = list()

for i in range(6):
    event = dict()
    event['event_type'] = random.choice(random_events)
    event['coords_x'] = round(random.uniform(-100, 100), 2)
    event['coords_y'] = round(random.uniform(-42.5, 42.5), 2)
    events.append(event)

df = pd.DataFrame(events)
print(df)
   coords_x  coords_y   event_type
0      4.07    -21.75         GOAL
1     -2.46    -20.99         SHOT
2     99.45    -15.09  MISSED_SHOT
3     78.17    -10.17         GOAL
4    -87.24     34.40         GOAL
5    -96.10     30.41         GOAL

我要完成的是在DataFrame的每一行上执行以下操作(伪代码)-

if df['coords_x'] < 0:
    df['coords_x'] * -1
    df['coords_y'] * -1

是否可以通过我缺少的df.apply()函数来做到这一点?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

IIUC,您可以使用loc来执行此操作,而无需使用apply

>>> df
   coords_x  coords_y   event_type
0      4.07    -21.75         GOAL
1     -2.46    -20.99         SHOT
2     99.45    -15.09  MISSED_SHOT
3     78.17    -10.17         GOAL
4    -87.24     34.40         GOAL
5    -96.10     30.41         GOAL

>>> df.loc[df.coords_x < 0, ['coords_x', 'coords_y']] *= -1
>>> df
   coords_x  coords_y   event_type
0      4.07    -21.75         GOAL
1      2.46     20.99         SHOT
2     99.45    -15.09  MISSED_SHOT
3     78.17    -10.17         GOAL
4     87.24    -34.40         GOAL
5     96.10    -30.41         GOAL