运行Python 3.6.4、pandas 0.22和numpy 1.14.1
我想从PandasGroupBy object中提取一个特定值。
我正在获取我的初始数据集,打开一个dataframe过滤掉不必要的列。然后我做一个groupby,其中D、E、F、G和H列都是基于a、B和C列求和的,这给了我需要从中提取值的数据集。
首先,这里有一个我正在使用的分组类型的示例。(也许这可以纠正)

output = df.groupby(['A', 'B', 'C'], as_index=False).agg({'D': [np.sum], 'E': [np.sum],'F': [np.sum],'G': [np.sum],'H': [np.sum]})

如果有帮助,列A、B和C都是字符串,其中D到H都使用to_numeric方法转换为数字。
接下来,我想使用列A的最大值从这个新数据集中拉出特定值。
我可以使用loc拉一个序列,但我想拉一个特定位置的值,然后将其插入另一个数据帧。也许loc会这样做,我只是想确定,无论我从这个组中按对象提取什么,都会放入新的dataframe。所以值是4,我得到一个变量=4,然后把它放到另一个dataframe中。
value = output.at[output.A.idxmax(), 'D']

我得到的错误是TypeError: only integer scalar arrays can be converted to a scalar index
我最好的猜测是,这是基于groupby返回groupby object的事实?或者这是否也适用于groupby对象?
我在这里有什么选择?也许我的groupby错了?也许我不需要一个groupby?也许我可以将groupby对象转换为dataframe对象,然后运行df.at?如有任何帮助,我们将不胜感激。
如果我做错了什么,请帮助我理解“为什么?”以及固定脚本。我对尽可能多地学习很感兴趣,而不是让每个人都为我工作。我喜欢python和它的功能,但在这一点上我还是个新手。
干杯

最佳答案

df = pd.DataFrame({'A': [1, 1, 3], 'B': ['Jon', 'Jon', 'Jane'], 'C': ['Jim', 'Jim', 'Jim'], 'D': [10,20,30], 'E': [24, 45, 56]})
summed = df.groupby(['A', 'B', 'C']).sum().reset_index()
max_a = summed[summed.A == summed.A.max()]
DataFrame.rest_index可能对你有用。https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reset_index.html如果有多于A到H的列,只需确保在执行groupby、sum和reset_索引之前仅选择这些列。祝你好运!

关于python - 从Pandas GroupBy对象中提取特定值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49116172/

10-15 21:25