gpt4 book ai didi

python - 从多索引数据框中删除列

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

考虑以下 DataFrame:

arrays = [['foo', 'bar', 'bar', 'bar'],
['A', 'B', 'C', 'D']]
tuples = list(zip(*arrays))
columnValues = pd.MultiIndex.from_tuples(tuples)
df = pd.DataFrame(np.random.rand(4,4), columns = columnValues)
print(df)
foo bar
A B C D
0 0.859664 0.671857 0.685368 0.939156
1 0.155301 0.495899 0.733943 0.585682
2 0.124663 0.467614 0.622972 0.567858
3 0.789442 0.048050 0.630039 0.722298

假设我想删除第一列,如下所示:

df.drop(df.columns[[0]], axis = 1, inplace = True)
print(df)
bar
B C D
0 0.671857 0.685368 0.939156
1 0.495899 0.733943 0.585682
2 0.467614 0.622972 0.567858
3 0.048050 0.630039 0.722298

这产生了预期的结果,但是列标签 fooA 被保留:

print(df.columns.levels)
[['bar', 'foo'], ['A', 'B', 'C', 'D']]

有没有办法从 MultiIndex DataFrame 中完全删除一个列,包括它的标签?

编辑:按照 John 的建议,我查看了 https://github.com/pydata/pandas/issues/12822 .我从中得到的是它不是错误,但我相信建议的解决方案 ( https://github.com/pydata/pandas/issues/2770#issuecomment-76500001 ) 对我不起作用。我在这里遗漏了什么吗?

df2 = df.drop(df.columns[[0]], axis = 1)
print(df2)
bar
B C D
0 0.969674 0.068575 0.688838
1 0.650791 0.122194 0.289639
2 0.373423 0.470032 0.749777
3 0.707488 0.734461 0.252820

print(df2.columns[[0]])

MultiIndex(levels=[['bar', 'foo'], ['A', 'B', 'C', 'D']],
labels=[[0], [1]])

df2.set_index(pd.MultiIndex.from_tuples(df2.columns.values))

ValueError: Length mismatch: Expected axis has 4 elements, new values have 3 elements

最佳答案

新答案

从 pandas 0.20 开始,pd.MultiIndex 有一个方法 pd.MultiIndex.remove_unused_levels

df.columns = df.columns.remove_unused_levels()

旧答案

我们的救星是 pd.MultiIndex.to_series()

它返回一系列限制在 DataFrame 中的元组

df.columns = pd.MultiIndex.from_tuples(df.columns.to_series())

关于python - 从多索引数据框中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36747750/

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