Python 在dataframe中减去两列
我的df如下所示:Python 在dataframe中减去两列,python,pandas,dataframe,Python,Pandas,Dataframe,我的df如下所示: Index Country Val1 Val2 ... Val10 1 Australia 1 3 ... 5 2 Bambua 12 33 ... 56 3 Tambua 14 34 ... 58 我想从每个国家的Val1中减去Val10,因此输出如下所示: Country Val10-Val1 Australia 4 Bambua 23 Tambu
Index Country Val1 Val2 ... Val10
1 Australia 1 3 ... 5
2 Bambua 12 33 ... 56
3 Tambua 14 34 ... 58
我想从每个国家的Val1中减去Val10,因此输出如下所示:
Country Val10-Val1
Australia 4
Bambua 23
Tambua 24
到目前为止,我已经:
def myDelta(row):
data = row[['Val10', 'Val1']]
return pd.Series({'Delta': np.subtract(data)})
def runDeltas():
myDF = getDF() \
.apply(myDelta, axis=1) \
.sort_values(by=['Delta'], ascending=False)
return myDF
RunDelta导致以下错误:
ValueError: ('invalid number of arguments', u'occurred at index 9')
解决此问题的正确方法是什么?给定以下数据帧:
df = pd.DataFrame([["Australia", 1, 3, 5],
["Bambua", 12, 33, 56],
["Tambua", 14, 34, 58]
], columns=["Country", "Val1", "Val2", "Val10"]
)
可以归结为一个简单的问题:
将其用作df:
df = pd.DataFrame([["Australia", 1, 3, 5],
["Bambua", 12, 33, 56],
["Tambua", 14, 34, 58]
], columns=["Country", "Val1", "Val2", "Val10"]
)
您还可以执行减法并将其放入新列中,如下所示
>>>df['Val_Diff'] = df['Val10'] - df['Val1']
Country Val1 Val2 Val10 Val_Diff
0 Australia 1 3 5 4
1 Bambua 12 33 56 44
2 Tambua 14 34 58 44
我今天所面临的一切,使我雄心勃勃地想与你们分享。如上所述,您可以轻松使用:
df['Val10-Val1'] = df['Val10']-df['Val1']
但有时可能需要使用apply函数,因此可以使用以下行:
df['Val10-Val1'] = df.apply(lambda row: row['Val10']-row['Val1'])
您还可以使用pandas.DataFrame.assign函数:例如
import numpy as np
import pandas as pd
df = pd.DataFrame([["Australia", 1, 3, 5],
["Bambua", 12, 33, 56],
["Tambua", 14, 34, 58]
], columns=["Country", "Val1", "Val2", "Val10"]
)
df = df.assign(Val10_minus_Val1 = df['Val10'] - df['Val1'])
assign最棒的部分是您可以添加任意多的任务。e、 g.获取两者的差异,然后获取其日志
df = df.assign(Val10_minus_Val1 = df['Val10'] - df['Val1'], log_result = lambda x: np.log(x.Val10_minus_Val1) )
结果:
您可以使用lambda函数并分配给新列来完成此操作
df['Val10-Val1'] = df.apply(lambda x: x['Val10'] - x['Val1'], axis=1)
print df
嗯,
df['Val10']-df['Val1']
?我可以在多个列上执行此操作吗?比如保持Val1不变并从中减去所有其他列,然后将结果写入新列?例如,对于df[Val1]-df[Val2],df[Val1]-df[Val3]……df[Val1]-df[Val10]@MurtazaHaji,您可以这样做:res=df.values-df['colName'].values.reformate(nrows,1)df_new=pd.DataFrame(res,index=df.index,columns=df.columns)。注意:从其余部分中删除的列将以0结尾。但是,请小心!您的代码df['Val10-Val1']=df.apply(lambda行:行['Val10']]-行['Val1'])
将产生keyrerror:('Val10','发生在索引国家])
,因为您没有正确指定轴。功能代码如下:df['Val10-Val1']=df.apply(lambda行:row['Val10']-row['Val1'],axis=1)
。注意:熊猫系列上的矢量化(例如df[col2]-df[col1])通常比使用axis=1的数据帧apply具有更好的性能。
df['Val10-Val1'] = df.apply(lambda x: x['Val10'] - x['Val1'], axis=1)
print df