gpt4 book ai didi

python - 按列对分组数据帧进行采样

转载 作者:行者123 更新时间:2023-11-28 22:29:21 26 4
gpt4 key购买 nike

我有一个数据框,我按如下方式对其进行分组并对特定列应用某些操作:

 df = df.groupby(['A', 'B', 'C']).agg({'ID': 'count', 'AMT': 'sum'})

对于每个 groupby 组合 (~15),我想随机抽样属于每个组合的行并返回一个样本 ID 并在第三个输出列中报告它。或者我真的只希望该组合中的行中的一个 ID 出现在表中,我不在乎它是否“随机”。

我尝试了以下方法:

 df = df.groupby(['A', 'B', 'C']).agg({'ID': 'count', 'AMT': 'sum', 'ID': 'sample'})

并收到错误:

 AttributeError: Cannot access callable attribute 'sample' of 'SeriesGroupBy' objects, try using the 'apply' method

然后我尝试了:

 func = lambda x: x.sample
df = df.groupby(['A', 'B', 'C']).agg({'ID': 'count', 'AMT': 'sum', 'ID': apply(func)})

没用所以我试了

df = df.groupby(['A', 'B', 'C']).agg({'ID': 'count', 'AMT': 'sum', 'ID': lambda x: x.sample})   

这也没有用。我查看了以下相关问题的链接,但它们似乎也没有帮助我。

Select multiple groups from pandas groupby object

http://pandas.pydata.org/pandas-docs/stable/groupby.html

Get specific element from Groups after applying groupby - PANDAS

How to access pandas groupby dataframe by key

https://chrisalbon.com/python/pandas_apply_operations_to_dataframes.html

关于如何处理有什么想法吗?

最佳答案

您尝试使用的代码存在一些问题。

  • lambda x: x.sample 返回 函数 本身而不是调用它(执行 lambda x: x.sample())。
  • x.sample() 返回一个 Series 对象。 .agg() 排除单个标量值或列表,因此会导致异常。您可以执行 x.sample().tolist() 但现在您有一个列表而不是单个值。这里使用numpy.random.choice()会更方便。
  • 在传递给 .agg() 的字典中多次指定同一列无效。只有最后一个会坚持下去。而是将要用作列表或字典的函数分配给该列。

考虑到上述情况,您将得出以下解决方案:

import numpy as np
df = df.groupby(['A', 'B', 'C']).agg({'ID': ('count', np.random.choice), 'AMT': 'sum'})

关于python - 按列对分组数据帧进行采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43056021/

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