【发布时间】:2021-02-05 23:27:46
【问题描述】:
我有一张像这样的桌子;它是交叉表的堆叠版本,因此项目和期间的每个组合都是唯一的:
+------+--------+-------+
| item | period | value |
+------+--------+-------+
| x | 1 | 6 |
| x | 2 | 4 |
| x | 3 | 5 |
| y | 1 | 9 |
| y | 2 | 10 |
| y | 3 | 100 |
+------+--------+-------+
对于每个项目,我需要找到值最低的时段,所以想要的结果是:
+------+--------+-------+
| item | period | value |
+------+--------+-------+
| x | 2 | 4 |
| y | 1 | 9 |
+------+--------+-------+
我已经研究过 pandas.DataFrame.idxmin() 但它似乎不是我需要的。 我找到了一种使用 groupby、min 和 merge 的方法,但我想知道是否有更优雅的解决方案?
我发现了许多与 R 和 SQL 相关的类似问题(我的解决方案实际上是“SQLish”,而不是 Python
我的解决办法是:
import numpy as np
import pandas as pd
df = pd.DataFrame()
df['item'] = np.repeat(['x','y'],3)
df['period'] = np.tile( [1,2,3] ,2 )
df['value'] = [6,4,5,9,10,100]
min_value = df[['item','value']].groupby('item').min().reset_index(drop = False)
periods_with_min_value = pd.merge(min_value, df, how ='inner', on=['item','value'])
【问题讨论】:
标签: python pandas dataframe aggregate min