Python 如何使用带有if语句的列的第一行修复df.apply?
我有一个如下所示的数据帧:Python 如何使用带有if语句的列的第一行修复df.apply?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个如下所示的数据帧: def data(x): df['chg'] = (df['close'] - df['open']) / df['open'] * 100 df['chg_high'] = (df['high'] - df['open']) / df['open'] * 100 df['chg_low'] = (df['low'] - df['open']) / df['open'] * 100 return df time
def data(x):
df['chg'] = (df['close'] - df['open']) / df['open'] * 100
df['chg_high'] = (df['high'] - df['open']) / df['open'] * 100
df['chg_low'] = (df['low'] - df['open']) / df['open'] * 100
return df
time open high low close chg chg_high chg_low
0 2013-04-01T00:00:00Z 95.50 106.50 93.70 104.70 9.633508 11.518325 -1.884817
1 2013-04-02T00:00:00Z 103.73 116.00 100.10 116.00 11.828786 11.828786 -3.499470
2 2013-04-03T00:00:00Z 116.00 158.41 110.00 133.78 15.327586 36.560345 -5.172414
3 2013-04-04T00:00:00Z 133.87 150.00 119.00 135.00 0.844102 12.049003 -11.107791
4 2013-04-05T00:00:00Z 134.67 144.00 127.09 141.80 5.294423 6.928046 -5.628574
5 2013-04-06T00:00:00Z 141.80 150.03 138.50 141.00 -0.564175 5.803949 -2.327221
def f(row):
if row['chg_high'] > x:
val = 1 + (x/100)
elif row['chg_high'] < x:
val = 1 + (df['chg']/100)
return val
df['profit'] = df.apply(f, axis=1)
如果'chg_high'列满足x的值,则使用x作为利润如果不满足,则我希望它使用'chg'列作为利润
我是这样写的:
def data(x):
df['chg'] = (df['close'] - df['open']) / df['open'] * 100
df['chg_high'] = (df['high'] - df['open']) / df['open'] * 100
df['chg_low'] = (df['low'] - df['open']) / df['open'] * 100
return df
time open high low close chg chg_high chg_low
0 2013-04-01T00:00:00Z 95.50 106.50 93.70 104.70 9.633508 11.518325 -1.884817
1 2013-04-02T00:00:00Z 103.73 116.00 100.10 116.00 11.828786 11.828786 -3.499470
2 2013-04-03T00:00:00Z 116.00 158.41 110.00 133.78 15.327586 36.560345 -5.172414
3 2013-04-04T00:00:00Z 133.87 150.00 119.00 135.00 0.844102 12.049003 -11.107791
4 2013-04-05T00:00:00Z 134.67 144.00 127.09 141.80 5.294423 6.928046 -5.628574
5 2013-04-06T00:00:00Z 141.80 150.03 138.50 141.00 -0.564175 5.803949 -2.327221
def f(row):
if row['chg_high'] > x:
val = 1 + (x/100)
elif row['chg_high'] < x:
val = 1 + (df['chg']/100)
return val
df['profit'] = df.apply(f, axis=1)
有没有办法解决这个问题?您可以在应用程序中使用lambda来更好地控制列:
df['profit'] = df.apply(lambda row: 1+(x/100) if row.chg_high < x else 1+(row.chg/100), axis=1)
df['price']=df.apply(λ行:1+(x/100),如果row.chg\u high
这将使用同一行。
请注意,您当前的条件不能处理row.chg_high==x