gpt4 book ai didi

python - 添加到多索引 DataFrame 时如何维护 lexsort 状态?

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:57 24 4
gpt4 key购买 nike

假设我用 pandas 构建了一个具有多索引列的数据框:

mi      = pd.MultiIndex.from_product([['trial_1', 'trial_2', 'trial_3'], ['motor_neuron','afferent_neuron','interneuron'], ['time','voltage','calcium']])
ind = np.arange(1,11)
df = pd.DataFrame(np.random.randn(10,27),index=ind, columns=mi)

Link to image of output dataframe

假设我只想要试验 1 中的电压数据。我知道以下代码会失败,因为索引未按词法排序:

idx    = pd.IndexSlice
df.loc[:,idx['trial_1',:,'voltage']]

如上所述in another post ,解决方案是对数据帧的索引进行排序,这按预期工作:

dfSorted    = df.sortlevel(axis=1)
dfSorted.loc[:,idx['trial_1',:,'voltage']]

我明白为什么这是必要的。但是,假设我想添加一个新列:

dfSorted.loc[:,('trial_1','interneuron','scaledTime')] = 100 * dfSorted.loc[:,('trial_1','interneuron','time')]

现在 dfSorted 不再排序,因为新列被附加到末尾,而不是按顺序排列。同样,在选择多个列之前,我必须调用 sortlevel

我觉得这会导致重复的、容易出错的代码,尤其是在我自己的项目中向更大的数据框中添加大量列时。是否有一种(最好是看起来干净的)方法可以按词法顺序插入新列,而不必一遍又一遍地调用 sortlevel?

最佳答案

一种方法是使用 filter 对列名称进行文本过滤:

In [117]: df['trial_1'].filter(like='voltage')
Out[117]:
motor_neuron afferent_neuron interneuron
voltage voltage voltage
1 -0.548699 0.986121 -1.339783
2 -1.320589 -0.509410 -0.529686

关于python - 添加到多索引 DataFrame 时如何维护 lexsort 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36142156/

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