python - Pandas:将行附加到列中具有多索引的DataFrame

标签 python pandas dataframe data-structures

我有一个在列中带有多索引的 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 作为默认值?

layout of the dataframe

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

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 层(而且可能会更多)。

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

最佳答案

多索引是tuplelist,我们只需要修改你的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/

相关文章:

python - 计算列表中以逗号分隔的元素并保存到另一列

python - Pygame鼠标移动

r - 我可以计算行或列的最小值或最大值,也可以计算列的平均值,但无法计算行的平均值。为什么不?

python - Pandas 数据框中前 N 行的条件均值和总和

python - 如何对数据表中重复的测量值进行排序?

python - 如何从 tf.estimator.Estimator 获取最后一个 global_step

python - Dask 的多处理中方法被调用两次而不是一次调用

python - 如何在 presto 中将列转换为行?

python - 如何在 scikit-learn 中进行预处理后保留数据帧的列标题

python - Pandas:将 Lambda 应用于多个数据帧