Pandas:使用列中的multiindex将行附加到DataFrame

lhk*_*lhk 6 python dataframe data-structures pandas

我在列中有一个带有多索引的DataFrame,并希望使用词典来追加新行.

假设DataFrame中的每一行都是一个城市.列包含"距离"和"车辆".并且每个单元格将是在该距离上选择该车辆的人口的百分比.

我正在构建一个这样的索引:

index_tuples=[]

for distance in ["near", "far"]:
    for vehicle in ["bike", "car"]:
        index_tuples.append([distance, vehicle])

index = pd.MultiIndex.from_tuples(index_tuples, names=["distance", "vehicle"])
Run Code Online (Sandbox Code Playgroud)

然后我正在创建一个数据帧:

dataframe = pd.DataFrame(index=["city"], columns = index)
Run Code Online (Sandbox Code Playgroud)

数据帧的结构看起来很好.虽然大熊猫已经添加了Nans作为默认值?

数据框的布局

现在我想为新城市设置一个字典并添加它:

my_home_city = {"near":{"bike":1, "car":0},"far":{"bike":0, "car":1}}
dataframe["my_home_city"] = my_home_city
Run Code Online (Sandbox Code Playgroud)

但这失败了:

ValueError:值的长度与索引的长度不匹配

这是完整的错误消息(pastebin)

更新:

谢谢你所有的好答案.我担心我的例子中的问题过于简单了.实际上我的索引嵌套了3个级别(它可能会变得更多).

所以我接受了将字典转换为元组列表的通用答案.这可能不像其他方法那样干净,但适用于任何多索引设置.

WeN*_*Ben 4

多索引是一个listof tuple,我们只需要修改你的dict,然后我们可以直接赋值

d = {(x,y):my_home_city[x][y] for x in my_home_city for y in my_home_city[x]}
df.loc['my_home_city',:]=d
df
Out[994]: 
distance     near       far     
vehicle      bike  car bike  car
city          NaN  NaN  NaN  NaN
my_home_city    1    0    0    1
Run Code Online (Sandbox Code Playgroud)

更多信息

d
Out[995]: 
{('far', 'bike'): 0,
 ('far', 'car'): 1,
 ('near', 'bike'): 1,
 ('near', 'car'): 0}

df.columns.values
Out[996]: array([('near', 'bike'), ('near', 'car'), ('far', 'bike'), ('far', 'car')], dtype=object)
Run Code Online (Sandbox Code Playgroud)