python - 按A列过滤DataFrame的最佳方法,B列条件并给出C列的最小值

标签 python pandas dataframe

我是python和pandas的新手。
我想得到Y每个 peak 的值与最小的 gap到目前为止,这是我的代码,它很长而且很傻

for i in df.peaks.unique():
    min_y= df[df['peaks'] == i][df['gap'] == min(df[df['peaks'] == i]['gap'])]['y'].tolist()[0]
    print(min_y)
它有效,结果如下:
171
204
246
278
311
416
因为,我看到了一些人们使用 apply 的高级语法。 , map ,所以他们不需要 loop ,我的任务可以应用那些技术吗?顺便说一句,我想改进我的代码,请帮忙!
DataFrame 在下面供您引用。
      x    y   w   h  peaks   gap
0    79  171  13  14  178.0   7.0
1   155  171  14  14  178.0   7.0
2   213  170  14  15  178.0   8.0
3   281  171  14  14  178.0   7.0
4   337  171  14  14  178.0   7.0
5    78  203  14  14  211.0   8.0
6   209  204  14  14  211.0   7.0
7   287  204  15  14  211.0   7.0
8   365  204  14  13  211.0   7.0
9    78  236  14  14  251.0  15.0
10  156  246  14  13  251.0   5.0
11  232  246  14  14  251.0   5.0
12   79  277  14  14  284.0   7.0
13  166  278  14  14  284.0   6.0
14  243  278  13  14  284.0   6.0
15   79  303  14  14  316.0  13.0
16  144  310  15  13  316.0   6.0
17  216  310  13  14  316.0   6.0
18  292  311  14  13  316.0   5.0
19  370  311  14  14  316.0   5.0
20   80  405  14  14  420.0  15.0
21  157  414  13  14  420.0   6.0
22  226  414  14  14  420.0   6.0
23  303  416  14  13  420.0   4.0
24  374  416  14  14  420.0   4.0

最佳答案

您可以使用 groupby并将其与 idxmin 结合使用

data.loc[data.groupby('peaks')['gap'].idxmin(), 'y']

# 0     171
# 6     204
# 10    246
# 13    278
# 18    311
# 23    416
# Name: y, dtype: int64

关于python - 按A列过滤DataFrame的最佳方法,B列条件并给出C列的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62968785/

相关文章:

python - 如何使用随机种子值在 Python 中对 PRNG 进行单元测试?

python - pandas DataFrame 添加一个新列和 fillna

python - Pandas 时间序列数据 - 每 30 分钟计算过去 24 小时内的唯一值

python - 将 pandas 数据帧转换为元组列表 - ('Row' 、 'Column' 、值)

python - 通过 Lyft Api 脚本自动执行三因素身份验证

python - Pandas :删除任何列包含特定子字符串的所有行

python - 许多二维点之间的最短路径(Shapely LineString 中的旅行商?)

python - 使用固定宽度的列保存数据框

python - 返回列中的第一个数值

pandas - 使用谷歌图表可视化 Pandas 数据框中的数据