Pandas 如何将数据附加到多索引数据帧

Pandas 如何将数据附加到多索引数据帧,pandas,dataframe,Pandas,Dataframe,如何将数据附加到多索引数据帧?我目前使用以下代码成功地从我的数据创建了一个数据帧 df = pd.DataFrame.from_dict(output, orient='index') 我在想也许是这样的 df = pd.DataFrame['MMM', 'IncomeStatement'].from_dict(output, orient='index') 要合并的数据帧 多索引/父数据帧 结果 我正在使用数据帧的简化版本 假设您从以下内容开始: import pandas as pd i

如何将数据附加到多索引数据帧?我目前使用以下代码成功地从我的数据创建了一个数据帧

df = pd.DataFrame.from_dict(output, orient='index')
我在想也许是这样的

df = pd.DataFrame['MMM', 'IncomeStatement'].from_dict(output, orient='index')
要合并的数据帧 多索引/父数据帧 结果
我正在使用数据帧的简化版本

假设您从以下内容开始:

import pandas as pd
import numpy as np

arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
    np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]

s = pd.DataFrame(index=arrays)
所以

>> s
bar one
    two
baz one
    two
foo one
    two
qux one
    two
(这是你的父母)

而且

c = pd.DataFrame(index=['one', 'two'], data=[23, 33])
所以

>> c
    0
one     23
two     33
(这是您的第一个数据帧)

因此,一个
merge
+
groupby
给出

>> pd.merge(s.reset_index(), c, left_on='level_1', right_index=True).groupby(['level_0', 'level_1']).sum()
        0
level_0     level_1     
bar one     23
    two     33
baz one     23
    two     33
foo one     23
    two     33
qux one     23
    two     33

数据帧最初是什么样子的,最后应该是什么样子?@AmiTavory-我已经包括了一个例子很好,但是这个例子仍然有很大的猜测空间。你接下来的问题让事情变得更糟。对不起,我对这个问题投了反对票,因为它非常不清楚。如果您将其编辑为更好的内容,我很乐意将其反转。要创建我使用的多索引,请使用
fin\u data=pd.MultiIndex.from\u product(iterables,name=['Ticker',Financials'])
,它没有可用的
reset\u index
。。。有什么想法吗?哦,你只是在创建一个没有数据框架的索引。从那以后还有很多路要走。到我的答案开头的最短路径就是创建一个数据框,将您的
fin\u数据作为其索引。@aranfleel不确定是什么
pd.DataFrame(index=pd.MultiIndex.from_product([0,1],'a','b','c'])。重置_index()
工作正常。然而,我必须说,这是一种非常低效的提问方式。如果你想帮助别人帮助你,那就努力编写一小段代码来说明问题所在。在您的问题中,
pd.MultiIndex.from\u product
甚至出现在哪里?对不起,我不能一直猜你的意思。如果我运行for循环,它们会是一种在我运行时附加和创建数据帧的方法吗?我想我能做的是将每个ticker附加到数组列表中,然后从那里我可以从数组中构建一个数据帧:-D(顿悟时刻)你实际上回答了我的问题,我只是把我的多索引的代码搞错了
c = pd.DataFrame(index=['one', 'two'], data=[23, 33])
>> c
    0
one     23
two     33
>> pd.merge(s.reset_index(), c, left_on='level_1', right_index=True).groupby(['level_0', 'level_1']).sum()
        0
level_0     level_1     
bar one     23
    two     33
baz one     23
    two     33
foo one     23
    two     33
qux one     23
    two     33