具有 MultiIndex 列的 DataFrame:通过字典设置部分行的值
DataFrame with MultiIndex columns: set values of partial row via dictionary
from pandas import Index, MultiIndex, DataFrame, NA
columns = MultiIndex.from_product( (["foo", "bar"], list("abc")) )
index = Index(range(10))
df = DataFrame(index=index, columns=columns, dtype="Float32")
foo bar
a b c a b c
0 <NA> <NA> <NA> <NA> <NA> <NA>
1 <NA> <NA> <NA> <NA> <NA> <NA>
2 <NA> <NA> <NA> <NA> <NA> <NA>
3 <NA> <NA> <NA> <NA> <NA> <NA>
4 <NA> <NA> <NA> <NA> <NA> <NA>
5 <NA> <NA> <NA> <NA> <NA> <NA>
6 <NA> <NA> <NA> <NA> <NA> <NA>
7 <NA> <NA> <NA> <NA> <NA> <NA>
8 <NA> <NA> <NA> <NA> <NA> <NA>
9 <NA> <NA> <NA> <NA> <NA> <NA>
如何使用字典 foo_sample = {"b": 1.2, "c": 1.3, "a": 1.1}
更新位置 [0, "foo"]
中的值?我试过了,使用 pandas 1.4.2
:
df.loc[0, "foo"] = foo_sample # does nothing.
df.loc[0, "foo"].update(foo_sample) # does nothing
df.loc[0, "foo"].replace(foo_sample) # does nothing
df.loc[0, "foo"].map(foo_sample) # replaces <NA> with NaN
这是一种方法:
df.loc[0, ("foo", list(foo_sample.keys()))] = foo_sample.values()
print(df)
# Output
a b c a b c
0 1.1 1.2 1.3 <NA> <NA> <NA>
1 <NA> <NA> <NA> <NA> <NA> <NA>
2 <NA> <NA> <NA> <NA> <NA> <NA>
3 <NA> <NA> <NA> <NA> <NA> <NA>
4 <NA> <NA> <NA> <NA> <NA> <NA>
5 <NA> <NA> <NA> <NA> <NA> <NA>
6 <NA> <NA> <NA> <NA> <NA> <NA>
7 <NA> <NA> <NA> <NA> <NA> <NA>
8 <NA> <NA> <NA> <NA> <NA> <NA>
9 <NA> <NA> <NA> <NA> <NA> <NA>
有关其他指导,请参阅 Pandas 文档中的 Advanced indexing with hierarchical index。
from pandas import Index, MultiIndex, DataFrame, NA
columns = MultiIndex.from_product( (["foo", "bar"], list("abc")) )
index = Index(range(10))
df = DataFrame(index=index, columns=columns, dtype="Float32")
foo bar
a b c a b c
0 <NA> <NA> <NA> <NA> <NA> <NA>
1 <NA> <NA> <NA> <NA> <NA> <NA>
2 <NA> <NA> <NA> <NA> <NA> <NA>
3 <NA> <NA> <NA> <NA> <NA> <NA>
4 <NA> <NA> <NA> <NA> <NA> <NA>
5 <NA> <NA> <NA> <NA> <NA> <NA>
6 <NA> <NA> <NA> <NA> <NA> <NA>
7 <NA> <NA> <NA> <NA> <NA> <NA>
8 <NA> <NA> <NA> <NA> <NA> <NA>
9 <NA> <NA> <NA> <NA> <NA> <NA>
如何使用字典 foo_sample = {"b": 1.2, "c": 1.3, "a": 1.1}
更新位置 [0, "foo"]
中的值?我试过了,使用 pandas 1.4.2
:
df.loc[0, "foo"] = foo_sample # does nothing.
df.loc[0, "foo"].update(foo_sample) # does nothing
df.loc[0, "foo"].replace(foo_sample) # does nothing
df.loc[0, "foo"].map(foo_sample) # replaces <NA> with NaN
这是一种方法:
df.loc[0, ("foo", list(foo_sample.keys()))] = foo_sample.values()
print(df)
# Output
a b c a b c
0 1.1 1.2 1.3 <NA> <NA> <NA>
1 <NA> <NA> <NA> <NA> <NA> <NA>
2 <NA> <NA> <NA> <NA> <NA> <NA>
3 <NA> <NA> <NA> <NA> <NA> <NA>
4 <NA> <NA> <NA> <NA> <NA> <NA>
5 <NA> <NA> <NA> <NA> <NA> <NA>
6 <NA> <NA> <NA> <NA> <NA> <NA>
7 <NA> <NA> <NA> <NA> <NA> <NA>
8 <NA> <NA> <NA> <NA> <NA> <NA>
9 <NA> <NA> <NA> <NA> <NA> <NA>
有关其他指导,请参阅 Pandas 文档中的 Advanced indexing with hierarchical index。