Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:从另一个数据帧逐列相乘?_Python_Pandas - Fatal编程技术网

Python 熊猫:从另一个数据帧逐列相乘?

Python 熊猫:从另一个数据帧逐列相乘?,python,pandas,Python,Pandas,我有两个数据帧,都由名为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.064

我有两个数据帧,都由名为
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
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
第二个数据帧有100000行。我关心的列是
df2['total_quantity']
,它的一个示例如下所示:

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
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-02-01', '2014-03-01', '2014-01-01'],
        'org': ['00K', '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']
如果先计算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

你能发布代码和数据来重现你的错误吗?这应该是可行的,因为它会在索引没有的地方产生
NaN
align@EdChum很抱歉,我们已经添加了一些。那么这里需要的输出是什么呢?您的
df2.index中有重复的值,因此出现了错误,当您有重复的索引值时,行值是否也重复了?我发布了一个方法,基本上您可以
加入
dfs,然后将列相乘