如果包含,则展平多索引数据帧级别并从列名末尾删除字符串
Flatten multiindex dataframe levels and remove string from end of column names if contains
我有一个这样的数据框
df = pd.DataFrame(
np.arange(2, 11).reshape(-1, 3),
index=list('ABC'),
columns=pd.MultiIndex.from_arrays([
['data1', 'data2','data3'],
['F', 'K',''],
['', '','']
], names=['meter', 'Sleeper',''])
).rename_axis('Index')
df
meter data1 data2 data3
Sleeper F K
Index
A 2 3 4
B 5 6 7
C 8 9 10
所以我想加入关卡名称并扁平化数据
按照这个解决方案 Pandas dataframe with multiindex column - merge levels
df.columns = df.columns.map('_'.join).str.strip('|')
df.reset_index(inplace=True)
得到这个
Index data1_F_ data2_K_ data3__
0 A 2 3 4
1 B 5 6 7
2 C 8 9 10
但我不想要那些 _
列名称的末尾,所以我添加了
df.columns = df.columns.apply(lambda x: x[:-1] if x.endswith('_') else x)
df
但是得到了
AttributeError: 'Index' object has no attribute 'apply'
我如何合并 map
和 apply
(将列名称展平并删除列名称末尾的 _
到一个 运行 中?
预期输出
Index data1_F data2_K data3
0 A 2 3 4
1 B 5 6 7
2 C 8 9 10
谢谢
你可以试试这个:
df.columns = df.columns.map('_'.join).str.strip('_')
df
Out[132]:
data1_F data2_K data3
Index
A 2 3 4
B 5 6 7
C 8 9 10
我有一个这样的数据框
df = pd.DataFrame(
np.arange(2, 11).reshape(-1, 3),
index=list('ABC'),
columns=pd.MultiIndex.from_arrays([
['data1', 'data2','data3'],
['F', 'K',''],
['', '','']
], names=['meter', 'Sleeper',''])
).rename_axis('Index')
df
meter data1 data2 data3
Sleeper F K
Index
A 2 3 4
B 5 6 7
C 8 9 10
所以我想加入关卡名称并扁平化数据 按照这个解决方案 Pandas dataframe with multiindex column - merge levels
df.columns = df.columns.map('_'.join).str.strip('|')
df.reset_index(inplace=True)
得到这个
Index data1_F_ data2_K_ data3__
0 A 2 3 4
1 B 5 6 7
2 C 8 9 10
但我不想要那些 _
列名称的末尾,所以我添加了
df.columns = df.columns.apply(lambda x: x[:-1] if x.endswith('_') else x)
df
但是得到了
AttributeError: 'Index' object has no attribute 'apply'
我如何合并 map
和 apply
(将列名称展平并删除列名称末尾的 _
到一个 运行 中?
预期输出
Index data1_F data2_K data3
0 A 2 3 4
1 B 5 6 7
2 C 8 9 10
谢谢
你可以试试这个:
df.columns = df.columns.map('_'.join).str.strip('_')
df
Out[132]:
data1_F data2_K data3
Index
A 2 3 4
B 5 6 7
C 8 9 10