【问题标题】:How to slice data with groupby() function?如何使用 groupby() 函数对数据进行切片?
【发布时间】:2021-05-04 06:27:54
【问题描述】:

我正在做一个机器学习项目。预处理数据后,我需要进行特征提取。在我的数据集中,我有 25 个班级(数据集中的字母表),每个班级有 20 个科目(我得到字母表的次数)。使用函数groupby(),它们 (25*20 = 500) 都具有相同的大小 (1000)。我想通过计算maccs 列均值将 1000 个采样点压缩为 50 个采样点。

我的数据集如下所示:

这是我尝试过的,但没有奏效。它给出了一个“SeriesGroupBy”对象没有属性“iloc”错误。

for i in np.arange(211, 890, 20):
  new_dataset = new_dataset.groupby(['alphabet', 'subject'])['maccs'].iloc[i-10:i+20,6].mean(axis=0)

在使用groupby() 函数时如何访问行和列?或者我可以用什么来做类似的事情?

【问题讨论】:

    标签: python pandas-groupby slice feature-extraction


    【解决方案1】:
    import pandas as pd
    
    alpha_df = pd.read_csv(##path to .csv file)
    
    alpha_gb = alpha_df.groupby(['alphabet','subject'])
    alpha_agg = alpha_gb.agg({
         'mccs' : 'mean'
    })
    agg_alpha_df = alpha_agg.reset_index()
    

    在这里,我假设您要先按alphabet 分类,然后按subject 列分类。因为groupby() 中列名的顺序很重要。 顺便说一句,这可以在一行中完成

    grouped_df = alpha_df.groupby(['alphabet','subject'])['mccs'].reset_index(inplace=True)
    

    但是,第一个更明确且可调整。 您可以查看here 以了解更多聚合操作。

    【讨论】:

    • 感谢您的回答,但我想做一些不同的事情。就像你说的,我结合了字母和主题列。然后我对它们中的每一个重新采样以获得 1000 个采样点。现在我正在尝试 maccs 列将 1000 个采样点的大小调整为 50,但首先我需要计算 maccs 列的 50 行并不意味着全部 1000 行。我在如何使用 groupby() 切片数据时遇到问题。
    • 对不起,我还是没有得到你想要做的事情。如果你想groupby 只是前 50 行;那么alpha_df.loc[:50, :].groupby(['alphabet','subject'])可以使用
    • 谢谢它的工作,但不完全是我想要的。我想在 1000 个采样点中每 50 个取平均值,我该怎么做? for i in np.arange(211, 890, 20): new_ds = new_dataset.iloc[i-10:i+20].groupby(['alphabet', 'subject'])['maccs'].mean()。我试过了,但它只给出了一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2017-06-03
    • 2013-09-20
    • 1970-01-01
    • 2018-07-08
    • 2020-12-05
    • 2014-05-02
    相关资源
    最近更新 更多