Python 如何在方法链中组合索引列?
我正在使用多索引数据帧。我的目标是将两个索引列合并为一个,而不必中断方法链 例如: A具有以下数据帧:Python 如何在方法链中组合索引列?,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我正在使用多索引数据帧。我的目标是将两个索引列合并为一个,而不必中断方法链 例如: A具有以下数据帧: In[1]: df Out[1]: value year type color 2018 A red -0.236022 blue -1.030577 B red 1.197374 blue -0.496247 2019 A red -0.0669
In[1]: df
Out[1]:
value
year type color
2018 A red -0.236022
blue -1.030577
B red 1.197374
blue -0.496247
2019 A red -0.066938
blue 0.087585
B red -1.702598
blue 0.085282
现在,我想在此数据帧上执行一系列方法。在这些方法的中间,我想把两个索引列合并成一个。例如,我执行一个查询(type==a),然后组合两个索引列(year和color),然后乘以(4)。所有这些都不会从链条上断裂:
df2 = df \
.query('type=="A"') \
.reset_index('type', drop=True) \
.combine_indexes(["year", "type"]) \ # <- this is what I'm missing
.multiply(4)
在本例中,我创建了“combine_index”方法。有人知道有没有类似的东西吗?我知道如何组合两个索引列,但前提是我从链中分离出来。我需要一些与链接兼容的东西
感谢关于如何加入索引级别的问题,让我们试试
index.map
:
tmp = df.query('type == "A"').droplevel('type')
# The money line:
tmp.index = tmp.index.map('{0[0]}-{0[1]}'.format)
tmp.index.name = 'year-color'
tmp
value
year-color
2018-red -0.236022
2018-blue -1.030577
2019-red -0.066938
2019-blue 0.087585
关于如何加入索引级别的问题,让我们试试
index.map
:
tmp = df.query('type == "A"').droplevel('type')
# The money line:
tmp.index = tmp.index.map('{0[0]}-{0[1]}'.format)
tmp.index.name = 'year-color'
tmp
value
year-color
2018-red -0.236022
2018-blue -1.030577
2019-red -0.066938
2019-blue 0.087585
在不中断链的情况下,我将移动
set\u index
last:
(df.query('type=="A"')
.reset_index('type',drop=True)
.mul(4)
.assign(year_color=lambda x: [f'{a}-{b}' for a,b in x.index])
.set_index('year_color')
)
输出(原始值为np.arange(8)
)
在不中断链的情况下,我将移动
set\u index
last:
(df.query('type=="A"')
.reset_index('type',drop=True)
.mul(4)
.assign(year_color=lambda x: [f'{a}-{b}' for a,b in x.index])
.set_index('year_color')
)
输出(原始值为np.arange(8)
)
谢谢你的回答。但正如我在问题中所指出的,我正在寻找一种数据帧上的方法,这样它就可以成为方法链的一部分。我感谢您的回答。但正如我在问题中指出的,我正在寻找一个数据帧上的方法,这样它就可以成为方法链的一部分。