在pandas数据帧中总结两列

yos*_*rry 33 python pandas

当我使用这种语法时,它会创建一个系列,而不是将列添加到我的新数据帧(总和).请帮忙.

我的代码:

sum = data['variance'] = data.budget + data.actual
Run Code Online (Sandbox Code Playgroud)

我的数据(在数据框df中):(目前除了预算之外还有其他所有内容 - 实际上,我想创建一个方差列?

    cluster     date    budget  actual          | budget - actual
0   a   2014-01-01 00:00:00     11000   10000       1000
1   a   2014-02-01 00:00:00     1200    1000
2   a   2014-03-01 00:00:00     200     100
3   b   2014-04-01 00:00:00     200     300
4   b   2014-05-01 00:00:00     400     450
5   c   2014-06-01 00:00:00     700     1000
6   c   2014-07-01 00:00:00     1200    1000
7   c   2014-08-01 00:00:00     200     100
8   c   2014-09-01 00:00:00     200     300
Run Code Online (Sandbox Code Playgroud)

And*_*den 48

我认为你误解了一些python语法,下面做了两个任务:

In [11]: a = b = 1

In [12]: a
Out[12]: 1

In [13]: b
Out[13]: 1
Run Code Online (Sandbox Code Playgroud)

所以在你的代码中,就好像你在做:

sum = df['budget'] + df['actual']  # a Series
# and
df['variance'] = df['budget'] + df['actual']  # assigned to a column
Run Code Online (Sandbox Code Playgroud)

后者为df创建了一个新列:

In [21]: df
Out[21]:
  cluster                 date  budget  actual
0       a  2014-01-01 00:00:00   11000   10000
1       a  2014-02-01 00:00:00    1200    1000
2       a  2014-03-01 00:00:00     200     100
3       b  2014-04-01 00:00:00     200     300
4       b  2014-05-01 00:00:00     400     450
5       c  2014-06-01 00:00:00     700    1000
6       c  2014-07-01 00:00:00    1200    1000
7       c  2014-08-01 00:00:00     200     100
8       c  2014-09-01 00:00:00     200     300

In [22]: df['variance'] = df['budget'] + df['actual']

In [23]: df
Out[23]:
  cluster                 date  budget  actual  variance
0       a  2014-01-01 00:00:00   11000   10000     21000
1       a  2014-02-01 00:00:00    1200    1000      2200
2       a  2014-03-01 00:00:00     200     100       300
3       b  2014-04-01 00:00:00     200     300       500
4       b  2014-05-01 00:00:00     400     450       850
5       c  2014-06-01 00:00:00     700    1000      1700
6       c  2014-07-01 00:00:00    1200    1000      2200
7       c  2014-08-01 00:00:00     200     100       300
8       c  2014-09-01 00:00:00     200     300       500
Run Code Online (Sandbox Code Playgroud)

另外,您不应该使用sum变量名作为覆盖内置sum函数.


pyl*_*ist 12

df['variance'] = df.loc[:,['budget','actual']].sum(axis=1)
Run Code Online (Sandbox Code Playgroud)

  • df['variance'] = df[['budget','actual']].sum(axis=1) # 看起来更漂亮 (2认同)