PythonDjango:合并数据帧对重叠列执行求和

PythonDjango:合并数据帧对重叠列执行求和,python,django,pandas,dataframe,merge,Python,Django,Pandas,Dataframe,Merge,我想合并两个列名称完全相同的数据帧。重叠的列可以一起添加。我遇到了一些麻烦,因为分组应该发生在名为“日期”的“索引”上,但我不能通过使用“日期”名称来创建此索引 实际上,我只需要指数(日期)和所有股票的和“调整收盘价” 我试过: data.join(temp, how='outer') 返回:“ValueError:列重叠但未指定后缀:索引(['Open'、'High'、'Low'、'Close'、'Adj Close'、'Volume'],dtype='object')” 返回:“Group

我想合并两个列名称完全相同的数据帧。重叠的列可以一起添加。我遇到了一些麻烦,因为分组应该发生在名为“日期”的“索引”上,但我不能通过使用“日期”名称来创建此索引

实际上,我只需要指数(日期)所有股票的“调整收盘价”

我试过:

data.join(temp, how='outer')
返回:“ValueError:列重叠但未指定后缀:索引(['Open'、'High'、'Low'、'Close'、'Adj Close'、'Volume'],dtype='object')”

返回:“Grouper和axis的长度必须相同

data = pd.merge(data, temp, left_index=True, right_index=True)['Adj Close'].sum(axis=1, skipna=True).astype(np.int64)
返回:“KeyError:'Adj Close'”

代码

def overview(request):
    stocks = Stock.objects.all()
    data = None

    for stock in stocks:
        if data is None:
            data = yf.download(stock.ticker, start=stock.trade_date, period="ytd")
        else:
            temp = yf.download(stock.ticker, start=stock.trade_date, period="ytd")
            data.join(temp, how='outer')
数据帧输出1

[*********************100%***********************]  1 of 1 completed
                  Open        High  ...   Adj Close     Volume
Date                                ...                       
2019-09-19   55.502499   55.939999  ...   54.697304   88242400
2019-09-20   55.345001   55.639999  ...   53.897728  221652400
2019-09-23   54.737499   54.959999  ...   54.142803   76662000
2019-09-24   55.257500   55.622501  ...   53.885353  124763200
2019-09-25   54.637501   55.375000  ...   54.714626   87613600
...                ...         ...  ...         ...        ...
2020-09-10  120.360001  120.500000  ...  113.489998  182274400
2020-09-11  114.570000  115.230003  ...  112.000000  180860300
2020-09-14  114.720001  115.930000  ...  115.360001  140150100
2020-09-15  118.330002  118.830002  ...  115.540001  184642000
2020-09-16  115.230003  116.000000  ...  112.129997  154679000

[251 rows x 6 columns]
数据帧输出2

[*********************100%***********************]  1 of 1 completed
                   Open         High  ...    Adj Close   Volume
Date                                  ...                      
2020-09-03  1699.520020  1700.000000  ...  1629.510010  3186300
2020-09-04  1609.000000  1634.989990  ...  1581.209961  2792500
2020-09-08  1525.000000  1555.550049  ...  1523.599976  2701600
2020-09-09  1548.900024  1558.719971  ...  1547.229980  1962100
2020-09-10  1550.180054  1573.660034  ...  1526.050049  1651200
2020-09-11  1528.150024  1538.699951  ...  1515.760010  1535300
2020-09-14  1531.650024  1557.000000  ...  1508.829956  2133000
2020-09-15  1527.890015  1550.989990  ...  1535.119995  1152100
2020-09-16  1542.479980  1554.369995  ...  1512.089966  1106400

假设您有两个df,如下所示:

df1 = pd.DataFrame({'Adj Close':[1, 2]}, index=['2019-09-19','2019-09-20'])
df2 = pd.DataFrame({'Adj Close':[3, 4, 5]}, index=['2019-09-19','2019-09-20','2019-09-21'])
df1

df2

然后,您可以将其浓缩为一个df:

df = pd.concat([df1, df2])


            Adj Close
2019-09-19          1
2019-09-20          2
2019-09-19          3
2019-09-20          4
2019-09-21          5
并使用sum生成groupby:

result = df.groupby(df.index).sum()

            Adj Close
2019-09-19          4
2019-09-20          6
2019-09-21          5
            Adj Close
2019-09-19          3
2019-09-20          4
2019-09-21          5
df = pd.concat([df1, df2])


            Adj Close
2019-09-19          1
2019-09-20          2
2019-09-19          3
2019-09-20          4
2019-09-21          5
result = df.groupby(df.index).sum()

            Adj Close
2019-09-19          4
2019-09-20          6
2019-09-21          5