gpt4 book ai didi

python - Pandas 。复制多索引级别

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:40 25 4
gpt4 key购买 nike

我有一个包含多索引列的 DataFrame:

df = pd.DataFrame(np.arange(12).reshape(3,-1))
df.columns = [['A', 'A', 'B', 'B'], [0, 1, 0, 1]]
print(df)

看起来像这样:

   A      B    
0 1 0 1
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11

我想做类似df['C'] = df['B']的事情来得到:

    A       B       C    
0 1 0 1 0 1
0 0 1 2 3 2 3
1 6 7 8 9 8 9
2 12 13 14 15 14 15

我得到了 ValueError: Wrong number of items passed 2, placement implies 1

我也试过 df.loc[:, slice('C', None)] = df['B'] 但没有成功。

实际上我的情况有点复杂:我在多索引中多了一层 (L0 I),我想复制 df['L0 I', 'B'] df['L0 II', 'B'](L0 II 不存在)。

最佳答案

您可以提取列并在列中创建 MultiIndex:

df1 = df['B']
df1.columns = [['C'] * len(df1.columns), df1.columns]
print (df1)
C
0 1
0 2 3
1 6 7
2 10 11

或者按切片选择并重命名第一层:

df1 = df.loc[:, slice('B', None)].rename(columns={'B':'C'}, level=0)
print (df1)
C
0 1
0 2 3
1 6 7
2 10 11

然后 joinconcat一起:

df = df.join(df1)
#alternative
#df = pd.concat([df,df1], axis=1)
print (df)
A B C
0 1 0 1 0 1
0 0 1 2 3 2 3
1 4 5 6 7 6 7
2 8 9 10 11 10 11

这里的另一个解决方案是使用 DataFrame.stack , 重复列 DataFrame.assign并通过 DataFrame.unstack 重新整形:

df1 = df.stack().assign(C = lambda x: x['B']).unstack()
print (df1)
A B C
0 1 0 1 0 1
0 0 1 2 3 2 3
1 4 5 6 7 6 7
2 8 9 10 11 10 11

关于python - Pandas 。复制多索引级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53579133/

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