本文是小编为大家收集整理的关于如何在pandas DataFrame中平移一个分层列索引?的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。
问题描述
说我有一个pandas.DataFrame在列上有分层索引,如下所示:
import pandas as pd columns = pd.MultiIndex.from_product([list('AB'), list('ab')]) df = pd.DataFrame(np.arange(8).reshape((2,4)), columns=columns) print df
out [1]:
A B a b a b 0 0 1 2 3 1 4 5 6 7
我想将列索引弄平,因此看起来如下:
Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
我尝试了
def flatten(col): col.name = ''.join(col.name) return col df.apply(f)
,但这只是忽略了新列的修改名称.
推荐答案
set_axis
df.set_axis([f"{x}{y}" for x, y in df.columns], axis=1, inplace=False) Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
index.map
df.columns = df.columns.map(''.join)
df
Aa Ab Ba Bb
0 0 1 2 3
1 4 5 6 7
对于非弦乐列值
df.columns = df.columns.map(lambda x: ''.join([*map(str, x)]))
df
Aa Ab Ba Bb
0 0 1 2 3
1 4 5 6 7
其他推荐答案
您可以将list comprehension与join一起使用:
df.columns = [''.join(col) for col in df.columns] print (df) Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
另一个可能的解决方案:
df.columns = df.columns.to_series().str.join('') print (df) Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
其他推荐答案
以下作用,但创建了一个新的DataFrame:
df_flat = pd.DataFrame({''.join(k):v for k,v in df.iteritems()}) print df_flat
out [3]:
Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
问题描述
Say I have a pandas.DataFrame with a hierarchical index on the columns as follows:
import pandas as pd columns = pd.MultiIndex.from_product([list('AB'), list('ab')]) df = pd.DataFrame(np.arange(8).reshape((2,4)), columns=columns) print df
Out[1]:
A B a b a b 0 0 1 2 3 1 4 5 6 7
I would like to flatten the column index so it looks as follows:
Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
I tried
def flatten(col): col.name = ''.join(col.name) return col df.apply(f)
but that just ignored the modified name of the new columns.
推荐答案
set_axis
df.set_axis([f"{x}{y}" for x, y in df.columns], axis=1, inplace=False) Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
index.map
df.columns = df.columns.map(''.join) df Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
For non-string column values
df.columns = df.columns.map(lambda x: ''.join([*map(str, x)])) df Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
其他推荐答案
You can use list comprehension with join:
df.columns = [''.join(col) for col in df.columns] print (df) Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
Another possible solution:
df.columns = df.columns.to_series().str.join('') print (df) Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
其他推荐答案
The following works but creates a new DataFrame:
df_flat = pd.DataFrame({''.join(k):v for k,v in df.iteritems()}) print df_flat
Out[3]:
Aa Ab Ba Bb 0 0 1 2 3 1 4 5 6 7
相关标签/搜索
mybatis启动不健康检查表
hana数据库select截取后六位
linux influxdb 查询
go 修改 环境变量
winform CellFormatting不显示图片
unity 边缘发光shader
docker ps -a 正则表达式
python 注册windows服务
dangerousHtml增加样式
postgre 获取UUId
web自动化测试selenium实验报告
微信小程序 getphonenumber 弹出前提示
python
pandas
dataframe
multi-index
python-3.x
audio
pygame
c++
qt
graphics