首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在堆叠的熊猫数据栏中添加一个列

问在堆叠的熊猫数据栏中添加一个列
EN

Stack Overflow用户
提问于 2016-02-03 04:16:15
回答 1查看 305关注 0票数 0

我想在amax列旁边添加一个days列,并计算amin和amax之间的天数差异。

以这种方式创建新列是不成功的。

代码语言:javascript
复制
df["dates"]["diff"] = df["dates"]["amax"]-df["dates"]["amin"]

在这里你可以看到我的数据收集的一个例子。

我使用以下代码创建了dataframe:

代码语言:javascript
复制
gb = stock_prices.groupby(['stock_name'])
df = gb.agg({'date' : [np.min, np.max]})
EN

回答 1

Stack Overflow用户

发布于 2016-02-03 06:18:10

可以在列中重置multiindex,然后添加新的列diff。

代码语言:javascript
复制
print df
                     activity       date     name
0                       slept 2014-12-02     Elon
1                     tripped 2013-08-04     Bill
2                       spoke 2012-05-08    Larry
3                        swam 2015-04-11     Elon
4                     spooked 2014-12-09     Jeff
5                       liked 2009-10-23    Larry
6                    whistled 2013-09-21    Larry
7                      up dog 2011-01-02     Bill
8                      smiled 2013-07-28    Larry
9                     donated 2014-11-19     Elon
10  grant men paternity leave 2015-10-24  Marissa
11                    fondled 2013-08-24     Jeff
代码语言:javascript
复制
#aggregate to min and max date 
g = df.groupby(['name']).agg({'date' : [np.max, np.min]})
print g
              date           
              amax       amin
name                         
Bill    2013-08-04 2011-01-02
Elon    2015-04-11 2014-11-19
Jeff    2014-12-09 2013-08-24
Larry   2013-09-21 2009-10-23
Marissa 2015-10-24 2015-10-24

#reset columns multiindex
levels = g.columns.levels
labels = g.columns.labels
g.columns = levels[1][labels[1]]

g['diff'] = g['amax'] - g['amin']
print g
              amax       amin      diff
name                                   
Bill    2013-08-04 2011-01-02  945 days
Elon    2015-04-11 2014-11-19  143 days
Jeff    2014-12-09 2013-08-24  472 days
Larry   2013-09-21 2009-10-23 1429 days
Marissa 2015-10-24 2015-10-24    0 days

但是,如果不希望在列中重置multiindex,请使用loc

代码语言:javascript
复制
print g
              date           
              amax       amin
name                         
Bill    2013-08-04 2011-01-02
Elon    2015-04-11 2014-11-19
Jeff    2014-12-09 2013-08-24
Larry   2013-09-21 2009-10-23
Marissa 2015-10-24 2015-10-24

g.loc[:, ('date', 'diff')] =  g.loc[:, ('date', 'amax')] - g.loc[:, ('date', 'amin')]
print g
              date                     
              amax       amin      diff
name                                   
Bill    2013-08-04 2011-01-02  945 days
Elon    2015-04-11 2014-11-19  143 days
Jeff    2014-12-09 2013-08-24  472 days
Larry   2013-09-21 2009-10-23 1429 days
Marissa 2015-10-24 2015-10-24    0 days
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35168409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档