gpt4 book ai didi

python - 分配多索引列,同时保留索引级别值的顺序

转载 作者:行者123 更新时间:2023-12-01 07:19:54 26 4
gpt4 key购买 nike

我有以下带有多索引列的数据框:

df = pd.DataFrame(np.arange(6).reshape(2, 3),
columns=pd.MultiIndex.from_tuples([('foo', 'a'), ('bar', 'a'), ('bar', 'b')]))

foo bar
a a b
0 0 1 2
1 3 4 5

我想分配一个新列 ('foo', 'b') 以便保留索引级别 0 中值的顺序,即结果列应为 ( 'foo', 'a'), ('foo', 'b'), ('bar', 'a'), ('bar', 'b'):

expected = pd.DataFrame(
[[0, 10, 1, 2], [3, 11, 4, 5]],
columns=pd.MultiIndex.from_product([['foo', 'bar'], list('ab')]))

foo bar
a b a b
0 0 10 1 2
1 3 11 4 5

以下内容会很好并且在某种程度上很直观,但不幸的是分配不接受位置参数:

df.assign({('foo', 'b'): [10, 11]})

所以我尝试了各种选项,但新列总是附加在末尾:

# using column indexer (appends the new column to the end):
df2 = df.copy()
df2['foo', 'b'] = [10, 11]
print(df2) # columns out of order
print(df2.sort_index(axis=1)) # order of "foo" and "bar" swapped

# using join (appends the new column to the end):
df3 = df.join(pd.DataFrame([10, 11], index=df.index,
columns=pd.MultiIndex.from_tuples([('foo', 'b')])))
print(df3) # columns out of order

# saving index levels beforehand doesn't help because they are sorted:
df4 = df.copy()
columns = df.columns.levels[0] # columns out of order
df4['foo', 'b'] = [10, 11]
df4 = df4[columns]
print(df4) # columns out of order

我可以使用[x[0] for x in df.columns],然后删除重复项(不使用set,因为应保留顺序),然​​后使用结果索引到新数据框的列,但对于这样一个简单的任务来说,这种方法感觉太繁重了。

我知道this question但是那里的答案不会保留列顺序。

最佳答案

插入

df.insert(1, ('foo', 'b'), [10, 11])
df
foo bar
a b a b
0 0 10 1 2
1 3 11 4 5

关于python - 分配多索引列,同时保留索引级别值的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57759351/

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