我有以下数据框架:

In [1]:
df = pd.DataFrame({'a': [1, 2, 3],
                   'b': [2, 3, 4],
                   'c': ['dd', 'ee', 'ff'],
                   'd': [5, 9, 1]})

df
Out [1]:
   a  b   c  d
0  1  2  dd  5
1  2  3  ee  9
2  3  4  ff  1

我想添加一个列'e',它是'a', 'b'和'd'列的和。

在浏览论坛时,我认为这样做是可行的:

df['e'] = df[['a', 'b', 'd']].map(sum)

但事实并非如此。

我想知道对列['a', 'b', 'd']和df作为输入的适当操作。


当前回答

这里最短最简单的方法就是使用

df.eval('e = a + b + d')

其他回答

你可以简单地将你的数据帧传递给下面的函数:

def sum_frame_by_column(frame, new_col_name, list_of_cols_to_sum):
    frame[new_col_name] = frame[list_of_cols_to_sum].astype(float).sum(axis=1)
    return(frame)

例子:

我有一个数据帧(awards_frame)如下:

...我想创建一个新列,显示每一行的奖励总和:

用法:

我简单地将我的awards_frame传递到函数中,同时指定新列的名称,以及要求和的列名列表:

sum_frame_by_column(awards_frame, 'award_sum', ['award_1','award_2','award_3'])

结果:

这里最短最简单的方法就是使用

df.eval('e = a + b + d')

如果你只有几列要求和,你可以这样写:

df['e'] = df['a'] + df['b'] + df['d']

这将创建新的列e,其值为:

   a  b   c  d   e
0  1  2  dd  5   8
1  2  3  ee  9  14
2  3  4  ff  1   8

对于较长的列列表,首选EdChum的答案。

当列按顺序排列时,遵循语法对我有帮助

awards_frame.values[:,1:4].sum(axis =1)

创建一个要相加的列名列表。

df['total']=df.loc[:,list_name].sum(axis=1)

如果你想要某些行的和,使用':'指定行