Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过添加其他列的值,在Panda dataframe中创建新列_Python_Python 2.7_Pandas - Fatal编程技术网

Python 通过添加其他列的值,在Panda dataframe中创建新列

Python 通过添加其他列的值,在Panda dataframe中创建新列,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有一个数据框,其值如下 A B 1 4 2 6 3 9 我需要通过添加a列和B列中的值来添加一个新列,如 A B C 1 4 5 2 6 8 3 9 12 我相信这可以通过lambda函数实现,但我不知道如何实现。非常简单: df['C'] = df['A'] + df['B'] 最简单的方法是使用DeepSpace答案。但是,如果确实要使用匿名函数,可以使用apply: df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1

我有一个数据框,其值如下

A B
1 4
2 6
3 9
我需要通过添加a列和B列中的值来添加一个新列,如

A B C
1 4 5
2 6 8
3 9 12
我相信这可以通过lambda函数实现,但我不知道如何实现。

非常简单:

df['C'] = df['A'] + df['B']

最简单的方法是使用DeepSpace答案。但是,如果确实要使用匿名函数,可以使用apply:

df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)

您可以使用
sum
函数来实现这一点,如注释中提到的@EdChum:

df['C'] =  df[['A', 'B']].sum(axis=1)

In [245]: df
Out[245]: 
   A  B   C
0  1  4   5
1  2  6   8
2  3  9  12

从0.16.0版开始,您可以按如下方式使用
assign

df = pd.DataFrame({"A": [1,2,3], "B": [4,6,9]})
df.assign(C = df.A + df.B)

# Out[383]: 
#    A  B   C
# 0  1  4   5
# 1  2  6   8
# 2  3  9  12
df.assign(C = df.A + df.B,
          Diff = df.B - df.A,
          Mult = df.A * df.B)
# Out[379]: 
#    A  B   C  Diff  Mult
# 0  1  4   5     3     4
# 1  2  6   8     4    12
# 2  3  9  12     6    27
可以按如下方式添加多个列:

df = pd.DataFrame({"A": [1,2,3], "B": [4,6,9]})
df.assign(C = df.A + df.B)

# Out[383]: 
#    A  B   C
# 0  1  4   5
# 1  2  6   8
# 2  3  9  12
df.assign(C = df.A + df.B,
          Diff = df.B - df.A,
          Mult = df.A * df.B)
# Out[379]: 
#    A  B   C  Diff  Mult
# 0  1  4   5     3     4
# 1  2  6   8     4    12
# 2  3  9  12     6    27

根据Anton的回答,您可以添加以下所有列:

df['sum'] = df[list(df.columns)].sum(axis=1)
df_b = df[['colA', 'colB', 'colC']]
你可以做:

df['C'] = df.sum(axis=1)
如果只想执行数值计算,请执行以下操作:

df['C'] = df.sum(axis=1, numeric_only=True)

参数
axis
0
1
作为参数,
0
表示跨列求和,跨行求和。

我想添加一条注释,以响应n00b收到的错误消息,但我没有足够的信誉。因此,我的评论是一个答案,以防它帮助任何人

n00b说:

我得到以下警告:试图在数据帧的切片副本上设置值。尝试改用.loc[row\u indexer,col\u indexer]=value

他得到这个错误是因为在创建
df['C']
之前,他对数据帧所做的任何操作都在数据帧中创建了一个视图,而不是它的副本。该错误不是由DeepSpace建议的简单计算
df['C']=df['A']+df['B']
引起的


查看文档。

关于n00b的评论:“我收到以下警告:试图在数据帧切片的副本上设置值。请尝试使用.loc[row\u indexer,col\u indexer]=value”

我也犯了同样的错误。在我的例子中,这是因为我试图对创建如下的数据帧执行列添加:

df['sum'] = df[list(df.columns)].sum(axis=1)
df_b = df[['colA', 'colB', 'colC']]
而不是:

df_c = pd.DataFrame(df, columns=['colA', 'colB', 'colC'])
df_b是来自df的切片的副本
df_c是一个新的数据帧。所以

df_c['colD'] = df['colA'] + df['colB']+ df['colC']
将添加列,并且不会引发任何警告。如果使用.sum(轴=1),则相同

可以使用


您只需添加以下内容即可解决此问题:
df['C']=df['A']+df['B']

我收到以下警告:试图在数据帧切片的副本上设置值。尝试使用.loc[row\u indexer,col\u indexer]=value-insteadRunning版本会给我“0.16.2”我收到与版本3.7.4相同的警告(默认值,2019年8月9日,18:34:13)[MSC v.1915 64位(AMD64)]@spec3我在显示第四列时遇到问题。我已经有
a,b,c
列了。但是当我尝试求
b+c=d的和时,我得到了一个
AttributeError:'DataFrame'对象没有属性c
。问题是什么?你可以做
df['C']=df.sum(axis=1)
知道如何支持变量列吗?我不敢相信这个答案没有多少赞成票。这是唯一一个不需要单独键入列名就可以得到总和的方法!谢谢@sparrow!您可以删除
列表(df.columns)
,因为它在这里是多余的。所以最后的代码应该看起来像
df['sum']=df.sum(axis=1)
这应该是正确的答案。这个方法避免了@n00b提到的警告。