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提到的警告。