代码之家  ›  专栏  ›  技术社区  ›  excelislife

数据集python上的Groupby函数

  •  1
  • excelislife  · 技术社区  · 6 年前

    我有下面的数据集,我用它来做我的研究。最终输出为斜率。

    import numpy as np
    import pandas as pd
    from scipy import stats
    
    df=pd.read_excel('I:/Python/Data/Copy.xlsx')
    
    
    df_np=np.array(df)
    
    x=np.array(df_np[:,14],dtype=float)
    y=np.array(df_np[:,12],dtype=float)
    
    
    
    for i, pair in enumerate(zip(x, y)):
    
    
    slope, intercept, r_value, p_value, std_err = stats.linregress(np.delete(x,i),np.delete(y,i))
    
    print('slope', slope, 'for data without pair', i, ':', pair)          
    

    在上面的代码中,我需要的帮助是测试事件分别输出,斜率值分别输出。测试事件和斜率值之间没有1:1的关系。

    测试ID=0,1,2,…9

    测试事件=11、12、13、14

    Test event     ID     x=axis      y-axis     slope
    

    这方面的任何帮助都会很好

    2 回复  |  直到 6 年前
        1
  •  1
  •   Peter Leimbigler    6 年前

    一种方法是根据 Test Event ,然后在 groupby 对象并在每个组上运行现有代码。阅读关于迭代组的内容 in the docs

    import numpy as np
    import pandas as pd
    from scipy import stats
    
    df=pd.read_excel('I:/Python/Data/Copy.xlsx')
    
    grouped = df.groupby('Test Event')
    
    for test_event, g in grouped:
        print('Test Event: {}'.format(test_event))
        df_np=np.array(g)
    
        x=np.array(df_np[:,1],dtype=float)
        y=np.array(df_np[:,2],dtype=float)
    
        for i, pair in enumerate(zip(x, y)):
    
        slope, intercept, r_value, p_value, std_err = stats.linregress(np.delete(x,i),np.delete(y,i))
    
        print('slope', slope, 'for data without pair', i, ':', pair) 
    
        2
  •  2
  •   JLuxton    6 年前

    可以使用任何数组作为 linegress 函数。。这包括数据帧中的系列:

    linregress(df['x-axis'], df['y-axis'])
    

    apply 使用熊猫群比时给每组

    grouped = df.groupby('Test Event')
    grouped.apply(lambda x: pd.Series(linregress(x['x-axis'], x['y-axis']))).rename(columns={
        0: 'slope',
        1: 'intercept',
        2: 'rvalue',
        3: 'pvalue',
        4: 'stderr'}).reset_index()