gpt4 book ai didi

python - 将数据分配给多索引 Pandas 数据框子集的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 03:17:51 24 4
gpt4 key购买 nike

获取由以下人员创建的数据框 di:

import pandas as pd

data = {
"Event": ['Biathlon', 'Ski Jump', 'Slalom', 'Downhill'],
"Award": ['Gold', 'Bronze', 'Gold', 'Silver'],
"Points": ['100', '10', '100', '40'],
"Rank": ['1', '3', '1', '2']
}

d = pd.DataFrame(data)
di = d.set_index(["Award","Event"])
print(di)

更改 ('Bronze', 'Ski Jump') 记录的分值的正确方法是什么?

通过反复试验,我知道以下内容似乎有效,但我不清楚 pandas documentation这是一种公认​​的方法。

di.loc[('Bronze', 'Ski Jump'), 'Points'] = 20

那么你会如何处理呢?你能指出相关文档吗?

最佳答案

你说得对。来自indexing docs (强调我的):

.loc is primarily label based, but may also be used with a boolean array.

DataFrame 上使用 .loc 时,语法是

df.loc[row_indexer,column_indexer]

row_indexercolumn_indexer都可以

  • A single label [...]
  • A list or array of labels ['a', 'b', 'c']
  • A slice object with labels 'a':'f' [...]
  • A boolean array

您正在使用第一个要点。您的行索引是一个多索引,标签是元组。您的列索引是一个纯字符串索引。然后,表达式

di.loc[('Bronze', 'Ski Jump'), 'Points']

转换为“获取位于 ('Bronze', 'Ski Jump') 沿行多索引和 'Points' 沿列索引的值”这正是您想要的。


考虑此示例的另一种方法是忘记多索引。来自 MultiIndex / Advanced Indexing :

It's worth keeping in mind that there's nothing preventing you from using tuples as atomic labels on an axis.

多索引与普通元组索引非常相似,尽管它提供了扩展功能(例如,您可以仅使用第一级索引,如 di.loc['Bronze'])。不过,您实际上可以像这样创建数据框

df = pd.DataFrame([
['100', '1'],
['10', '3'],
['100', '1'],
['40', '2']
], columns=['Points', 'Rank'], index=[
('Gold', 'Biathlon'),
('Bronze', 'Ski Jump'),
('Gold', 'Slalom'),
('Silver', 'Downhill')
])

这更清楚为什么 di.loc[('Bronze', 'Ski Jump'), 'Points'] 是一个有效的标签选择。

关于python - 将数据分配给多索引 Pandas 数据框子集的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35665042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com