Python 在dataframe中减去两列

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

我的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
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