你好我有一个带有长字符串重列名的Pandas df,我想要一些数字和一个字符串中的字符串:
df = pd.DataFrame(
[[1, 3, 5], [2, 4, 6]],
columns=['Base + Trial Spot Price(X220) Settle Price S=1 [1.00] 1932', 'Base + Trial Spot Price(Y220) Settle Price S=1 [1.00] 2012', 'Base + Trial Spot Price(Y220) Settle Price S=1 [1.00] 2015'])
我想从列名中删除某些值,并将它们添加为列级别。
所以我最终会:
X220, Y220, Y220
1932, 2012, 2015
作为多级列。
我在list / dict理解中尝试过split / strip但是无法弄清楚如何链接这些方法(就像你可以在pandas中链替换)。我玩正则表达式,但我没有走远。
由于
答案 0 :(得分:0)
您可以从提取列数据创建元组并将其传递给函数pd.MultiIndex.from_tuples()
这将生成列,然后您可以重新创建数据帧。请在下面找到代码。
import pandas as pd
import numpy as np
pd.set_option('display.multi_sparse', False)
values = [[1, 3, 5], [2, 4, 6]]
df = pd.DataFrame(values,columns=['Base + Trial Spot Price(X220) Settle Price S=1 [1.00] 1932', 'Base + Trial Spot Price(Y220) Settle Price S=1 [1.00] 2012', 'Base + Trial Spot Price(Y220) Settle Price S=1 [1.00] 2015'])
cols = pd.MultiIndex.from_tuples([(df.columns[0][24:28], df.columns[0][54:]), (df.columns[1][24:28], df.columns[0][54:]), (df.columns[2][24:28], df.columns[0][54:])])
pd.DataFrame(values, columns=cols)
<强>输出:强>
X220 Y220 Y220
1932 1932 1932
0 1 3 5
1 2 4 6
行pd.set_option('display.multi_sparse', False)
用于配置多轴具有重复的列名。
<强>参考文献:强>
答案 1 :(得分:0)
您可以使用str.extract为列名提取所需的值,然后使用multiindex.from_tuples创建多索引
df.columns = df.columns.str.extract('.*?\((.*)\).*?(\d{4})', expand=True)
df.columns = pd.MultiIndex.from_tuples(df.columns)
你得到了
X220 Y220
1932 2012 2015
0 1 3 5
1 2 4 6