我有一个在列中带有多索引的 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"])
然后我正在创建一个数据框:
dataframe = pd.DataFrame(index=["city"], columns = index)
数据框的结构看起来不错。尽管 pandas 添加了 Nans 作为默认值?
现在我想为新城市建立一个字典并添加它:
my_home_city = {"near":{"bike":1, "car":0},"far":{"bike":0, "car":1}}
dataframe["my_home_city"] = my_home_city
但这失败了:
ValueError: Length of values does not match length of index
这是完整的 error message (粘贴)
更新:
感谢您提供所有好的答案。恐怕我在我的例子中把问题简单化了。实际上,我的索引嵌套了 3 层(而且可能会更多)。
所以我接受了将我的字典转换为元组列表的通用答案。这可能不如其他方法干净,但适用于任何多索引设置。
最佳答案
多索引是tuple
的list
,我们只需要修改你的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
更多信息
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)
关于python - Pandas:将行附加到列中具有多索引的DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47338203/