gpt4 book ai didi

pandas - 如何增加 Pandas MultiIndex 的级别?

转载 作者:行者123 更新时间:2023-12-02 03:12:54 25 4
gpt4 key购买 nike

如何增加 pandas 多重索引特定级别中的所有值?

最佳答案

您可以创建新的 MultiIndex.from_tuples并分配:

df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6],
'C':[7,8,9],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3]})

df = df.set_index(['A','B'])
print (df)
C D E F
A B
1 4 7 1 5 7
2 5 8 3 3 4
3 6 9 5 6 3

#change multiindex
new_index = list(zip(df.index.get_level_values('A'), df.index.get_level_values('B') + 1))
df.index = pd.MultiIndex.from_tuples(new_index, names = df.index.names)
print (df)
C D E F
A B
1 5 7 1 5 7
2 6 8 3 3 4
3 7 9 5 6 3

另一个可能的解决方案是 reset_indexset_index :

df = df.reset_index()
df.B = df.B + 1
df = df.set_index(['A','B'])
print (df)
C D E F
A B
1 5 7 1 5 7
2 6 8 3 3 4
3 7 9 5 6 3

解决方案 DataFrame.assign :

print (df.reset_index().assign(B=lambda x: x.B+1).set_index(['A','B']))

时间:

In [26]: %timeit (reset_set(df1))
1 loop, best of 3: 144 ms per loop

In [27]: %timeit (assign_method(df3))
10 loops, best of 3: 161 ms per loop

In [28]: %timeit (jul(df2))
1 loop, best of 3: 543 ms per loop

In [29]: %timeit (tuples_method(df))
1 loop, best of 3: 581 ms per loop

计时代码:

np.random.seed(100)
N = 1000000
df = pd.DataFrame(np.random.randint(10, size=(N,5)), columns=list('ABCDE'))
print (df)

df = df.set_index(['A','B'])
print (df)
df1 = df.copy()
df2 = df.copy()
df3 = df.copy()

def reset_set(df):
df = df.reset_index()
df.B = df.B + 1
return df.set_index(['A','B'])

def assign_method(df):
df = df.reset_index().assign(B=lambda x: x.B+1).set_index(['A','B'])
return df

def tuples_method(df):
new_index = list(zip(df.index.get_level_values('A'), df.index.get_level_values('B') + 1))
df.index = pd.MultiIndex.from_tuples(new_index, names = df.index.names)
return df

def jul(df):
df.index = pd.MultiIndex.from_tuples([(x[0], x[1]+1) for x in df.index], names=df.index.names)
return df

谢谢Jeff另一种解决方案:

df.index.set_levels(df.index.levels[1] + 1 , level=1, inplace=True)
print (df)

C D E F
A B
1 5 7 1 5 7
2 6 8 3 3 4
3 7 9 5 6 3

关于pandas - 如何增加 Pandas MultiIndex 的级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40961894/

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