gpt4 book ai didi

python - pandas 数组索引不足

转载 作者:行者123 更新时间:2023-11-30 22:53:14 27 4
gpt4 key购买 nike

我在 result 变量中有一个 pandas DataFrame,并希望从中提取一些行,具体来说,按 id 对对它们进行分组 code>s 并选择行,对应于最小 scores。

这是代码:

gb = result.groupby(['id1', 'id2'], sort=False, group_keys=False, as_index=False)
result1 = result.loc[gb['score'].idxmin()].dropna()

我已停止调试器中的代码以检查结果的正确性。结果很奇怪。

>>> gb['score'].idxmin().shape
Out[11]: (1800L,)

>>> result1.shape
Out[12]: (1810, 6)

这 10 行从哪里来?!

此外,我在 Jupyter Notebook 中以交互方式对同一个数据文件运行了完全相同的代码,并获得了 1800 行。

我正在使用 Anaconda 进行所有更新。这是版本字符串

Python 2.7.11 |Anaconda 4.0.0 (64-bit)| (default, Feb 16 2016, 09:58:36) [MSC v.1500 64 bit (AMD64)]

最佳答案

result 索引中必须有重复的标签。例如,

import numpy as np
import pandas as pd

result = pd.DataFrame({'X':np.arange(6)}, index=list('ABAAEF'))
print(result)
# X
# A 0
# B 1
# A 2
# A 3
# E 4
# F 5

一个索引标签,'A',对应三行

print(result.loc[['A']])
# X
# A 0
# A 2
# A 3
<小时/>

为了确保 idxmin 返回的标签对应于唯一的行,您需要 result 有一个唯一的索引。使用 setindex 生成这样的索引,或调用 reset_indexresult 提供通用整数索引:

result = result.reset_index()
# index X
# 0 A 0
# 1 B 1
# 2 A 2
# 3 A 3
# 4 E 4
# 5 F 5

gb = result.groupby(['id1', 'id2'], sort=False, group_keys=False, as_index=False)
result1 = result.loc[gb['score'].idxmin()].dropna()
<小时/>

检查 DataFrame 是否具有唯一索引的一个简单方法是检查 Index.is_unique 属性:

In [53]: result = pd.DataFrame({'X':np.arange(6)}, index=list('ABAAEF'))
In [54]: result.index.is_unique
Out[54]: False

In [55]: df = pd.DataFrame({'X':np.arange(6)})
In [56]: df.index.is_unique
Out[56]: True

关于python - pandas 数组索引不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38251519/

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