gpt4 book ai didi

python - 使用级别获取多索引 Pandas DataFrame 的最小索引

转载 作者:太空狗 更新时间:2023-10-30 02:57:13 27 4
gpt4 key购买 nike

我有一个 Pandas DataFrame那是multiindexed并希望在每个级别的行的子集中找到特定列的最小值,并获取这些行的全部内容。

import pandas as pd

idx = pd.MultiIndex.from_product([['v1', 'v2'],
['record' + str(i) for i in range(1, 7)]])

df = pd.DataFrame([[2., 114], [2., 1140],
[3., 114], [3., 1140],
[5., 114], [5., 1140],
[2., 114], [2., 1140],
[3., 114], [3., 1140],
[5., 114], [5., 1140]],
columns=['col1', 'col2'],
index=idx)

我的结构:

                 col1  col2
level1 level2
v1 record1 2.0 114
record2 2.0 1140
record3 3.0 114
record4 3.0 1140
record5 5.0 114
record6 5.0 1140
v2 record1 2.0 114
record2 2.0 1140
record3 3.0 114
record4 3.0 1140
record5 5.0 114
record6 5.0 1140

示例所需的输出我想要另一列的最小值,其中 col1 == 5:

                 col1  col2
level1 level2
v1 record5 5.0 114
v2 record5 5.0 114

我知道我可以使用比较语句获取行的子集。

df.ix[df['col1'] == 5]

而且我还知道我可以从所有级别获取该子集中列的最小

df['col2'][df['col1'] == 5].min(level='level1')

如果我想指定级别,那么我可以获得特定级别上的 1 行的索引

df.ix['v1', pay_up_file.ix['v1']['col2'][(df.ix['v1']['col1'] == 5)].idxmin()]

但我不知道是否有一种有效的方法可以从所有级别获取索引

似乎没有可用的方法:

df['col2'][df['col1'] == 5].idxmin(level='level1')

我可以用这个得到我想要的:

df.ix[
(df['col1'] == 5) &
(df['col2'].isin(df['col2'][df['col1'] == 5].min(level='level1').values))
]

但是对于 Pandas 中的所有其他内容,有没有更好的方法来获取我的输出?

最佳答案

这应该有效:

df.loc[df.loc[df.col1 == 5.].groupby(level=0).col2.idxmin()]

col1 col2
v1 record5 5.0 114
v2 record5 5.0 114

注意事项

我正在使用 idxmin,正如您认为应该的那样。但上下文很重要。我在 groupby(level=0).col2.idxmin() 之后使用它,它的行为与您认为的 col2.idxmin(level=...) 应该一样。

关于python - 使用级别获取多索引 Pandas DataFrame 的最小索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37865865/

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