运行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/