如何使用pandas为与多部分索引的一部分匹配的所有行设置值

2024-04-25 07:07:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

>>> import pandas
>>> indexes = [['a', 'a', 'c', 'd', 'd', '1'], ['1', '1', '3', '4', '5', '6']]
>>> pandas.DataFrame(index=indexes, columns=["Year", "Color", "Manufacturer"])
    Year Color Manufacturer
a 1  NaN   NaN          NaN
  1  NaN   NaN          NaN
c 3  NaN   NaN          NaN
d 4  NaN   NaN          NaN
  5  NaN   NaN          NaN
1 6  NaN   NaN          NaN

在第二个索引值为“1”的所有行中,我可以使用什么命令将Manufacturer列设置为“Manf X”?我尝试了以下命令,但运气不太好:

set_value((,'1'), "Manufacturer", "Manf X")
set_value((:,'1'), "Manufacturer", "Manf X")

看起来我可以使用类似的命令来设置第一个索引值为1的所有行中的列,但是当我只想匹配第二个索引值时,它就不能工作了

set_value(('1',), "Manufacturer", "Manf X")

Tags: columns数据import命令dataframepandasindexvalue
1条回答
网友
1楼 · 发布于 2024-04-25 07:07:34

单向使用slicers

import pandas as pd
indexes = [['a', 'a', 'c', 'd', 'd', '1'], ['1', '1', '3', '4', '5', '6']]
df = pd.DataFrame(index=indexes, columns=["Year", "Color", "Manufacturer"])

df.sort_index(inplace=True)
print(df)
df.loc[pd.IndexSlice[:, '1'], ["Manufacturer"]] = "SomeManufacturer"
print(df)

之前:

    Year Color Manufacturer
1 6  NaN   NaN          NaN
a 1  NaN   NaN          NaN
  1  NaN   NaN          NaN
c 3  NaN   NaN          NaN
d 4  NaN   NaN          NaN
  5  NaN   NaN          NaN

之后:

    Year Color      Manufacturer
1 6  NaN   NaN               NaN
a 1  NaN   NaN  SomeManufacturer
  1  NaN   NaN  SomeManufacturer
c 3  NaN   NaN               NaN
d 4  NaN   NaN               NaN
  5  NaN   NaN               NaN

(需要对索引进行排序。没有排序:)

^{pr4}$

相关问题 更多 >