加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Pandas:从另一个数据帧中逐列乘?

发布时间:2020-12-16 22:50:51 所属栏目:Python 来源:网络整理
导读:我有两个数据框,都由一个名为month的日期列索引.第一个是df1,有八行.我关心的列是df [num_percent],它看起来像这样: 2015-02-01 0.0715492015-03-01 0.0703682015-04-01 0.0692912015-05-01 0.0683942015-06-01 0.0674522015-07-01 0.0663022015-08-01 0.06

我有两个数据框,都由一个名为month的日期列索引.第一个是df1,有八行.我关心的列是df [‘num_percent’],它看起来像这样:

2015-02-01    0.071549
2015-03-01    0.070368
2015-04-01    0.069291
2015-05-01    0.068394
2015-06-01    0.067452
2015-07-01    0.066302
2015-08-01    0.065543
2015-09-01    0.064591
Name: num_percent,dtype: float64

第二个数据帧有100,000行.我关心的专栏是df2 [‘total_quantity’],它的样本如下所示:

2014-11-01    324199
2014-12-01    378443
2015-01-01    367379
2015-02-01    336863
2015-03-01    380268
2015-04-01    386292
2015-05-01    373213
2015-06-01    403343
2015-07-01    414310
2015-08-01    403684
2015-09-01    420922
Name: total_quantity,dtype: int64

我想在df2中添加一个新列,它是df2 [‘total_quantity’]的值乘以df1中月份的相应值.

我怎样才能做到这一点?

如果我尝试:

df2['percent'] = df2['total_quantity'] * df1['num_percent']

我得到ValueError:无法从重复的轴重新索引.

更新:这里有一些数据和代码来复制问题:

data = {'month': ['2014-01-01','2014-02-01','2014-03-01'],'num_percent': [0.4,0.5,0.6]}
df1 = pd.DataFrame(data)
df1['month'] = pd.to_datetime(df1['month'])
df1 = df1.set_index('month')

data = {'month': ['2014-01-01','2014-03-01','2014-01-01'],'org': ['00K','00K','00L'],'total_quantity': [1000,1000,2000,1000]}
df2 = pd.DataFrame(data)
df2['month'] = pd.to_datetime(df2['month'])
df2 = df2.set_index('month')

# Both of these produce ValueError: cannot reindex... 
df2['percent'] = df1['num_percent'] * df2['total_quantity']
df2.loc[df2.index.isin(df1.index),'percent'] = df2['total_quantity'] * df1['num_percent']
最佳答案
如果您首先是join dfs,那么您可以乘以:

In [24]:
df3 = df1.join(df2)
df3['percent'] = df3['num_percent'] * df3['total_quantity']
df3

Out[24]:
            num_percent  org  total_quantity  percent
month                                                
2014-01-01          0.4  00K            1000      400
2014-01-01          0.4  00L            1000      400
2014-02-01          0.5  00K            1000      500
2014-03-01          0.6  00K            2000     1200

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读