Python 根据条件修改dataframe中的2列

Python 根据条件修改dataframe中的2列,python,pandas,dataframe,Python,Pandas,Dataframe,我已经看到了大量关于堆栈溢出的示例,这些示例介绍了如何基于一个条件修改数据帧中的单个列,但我不知道如何基于单个条件修改多个列 如果我有一个基于以下代码生成的数据帧- import random import pandas as pd random_events = ('SHOT', 'MISSED_SHOT', 'GOAL') events = list() for i in range(6): event = dict() event['event_type'] = ran

我已经看到了大量关于堆栈溢出的示例,这些示例介绍了如何基于一个条件修改数据帧中的单个列,但我不知道如何基于单个条件修改多个列

如果我有一个基于以下代码生成的数据帧-

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
我想在数据帧的每一行上实现以下(伪代码)——

if df['coords_x'] < 0:
    df['coords_x'] * -1
    df['coords_y'] * -1
如果df['coords_x']<0:
df['coords_x']*-1
df['coords_y']*-1
有没有办法通过我缺少的
df.apply()
函数来实现这一点


提前感谢您的帮助

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
>>df
协调x协调y事件类型
0.4.07-21.75目标
1-2.46-20.99杆
299.45-15.09失误
378.17-10.17目标
4-87.24 34.40进球
5-96.10 30.41目标
>>>df.loc[df.coords\ux<0,['coords\ux','coords\uy']]*=-1
>>>df
协调x协调y事件类型
0.4.07-21.75目标
1 2.46 20.99镜头
299.45-15.09失误
378.17-10.17目标
4 87.24-34.40目标
5 96.10-30.41目标

是的-这很好地工作了,没有意识到你可以使用
loc
。那么你能解释一下(即使是编辑一下)它的语法吗?是不是
df.loc[{condition},[{columns to modify}]]{math to apply}
?你自己也解释得很清楚:-)!只需注意,
*=
操作符是用于inplace的multiplication@mattdondersdf.loc[{rows to modify or boolean mask},[{columns to modify or boolean mask}]={value}@sacul Very nice:)