【问题标题】:Apply Zscore after groupby in Python在 Python 中的 groupby 之后应用 Zscore
【发布时间】:2020-07-30 22:04:21
【问题描述】:

我正在尝试对分组数据集应用函数。为此,我有这个 Pandas 数据框:

test_df = pd.DataFrame({
        'A':list('aabdee'),
        'AA':['2020-03-22', '2020-03-22', '2020-03-29', '2020-03-22','2020-03-22', '2020-03-29'],
         'B':[1,0.5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,3,1,7,1,1],
         'E':[5,3,6,9,2,4]
})

我想将 Zscore 应用于每一列(按变量 A 和 AA 分组)。所以我做了:

numeric_columns = test_df.select_dtypes(np.number)
test_df.groupby(['A', 'AA'])[numeric_columns.columns].apply(stats.zscore)

然后我有很多错误,像这样:

Series.name must be a hashable type

还有这个:

RuntimeWarning: invalid value encountered in true_divide
  return (a - mns) / sstd

【问题讨论】:

    标签: python-3.x pandas scipy statistics


    【解决方案1】:

    为我工作GroupBy.transform:

    numeric_columns = test_df.select_dtypes(np.number)
    
    c = numeric_columns.columns
    test_df[c] = test_df.groupby(['A', 'AA'])[c].transform(stats.zscore)
    
    print (test_df)
       A          AA    B    C    D    E
    0  a  2020-03-22  1.0 -1.0 -1.0  1.0
    1  a  2020-03-22 -1.0  1.0  1.0 -1.0
    2  b  2020-03-29  NaN  NaN  NaN  NaN
    3  d  2020-03-22  NaN  NaN  NaN  NaN
    4  e  2020-03-22  NaN  NaN  NaN  NaN
    5  e  2020-03-29  NaN  NaN  NaN  NaN
    

    编辑:

    c = numeric_columns.columns
    for g, df in  test_df.groupby(['A', 'AA']):
        print (df)
    
       A          AA    B  C  D  E
    0  a  2020-03-22  1.0  7  1  5
    1  a  2020-03-22  0.5  8  3  3
       A          AA    B  C  D  E
    2  b  2020-03-29  4.0  9  1  6
       A          AA    B  C  D  E
    3  d  2020-03-22  5.0  4  7  9
       A          AA    B  C  D  E
    4  e  2020-03-22  5.0  2  1  2
       A          AA    B  C  D  E
    5  e  2020-03-29  4.0  3  1  4
    

    【讨论】:

    • @CatarinaNogueira - 预期输出,因为这里使用了groupby。因此功能分别适用于每个组。而且因为只有第一组有2行,所有其他组只有1行,一行的std是NaN,所以输出是zscore的NaN
    • @CatarinaNogueira - 是的,完全正确。因为所有其他组的长度为1,但第一组的长度为2
    • @CatarinaNogueira - 稍等。
    • @CatarinaNogueira - 如果按 2 列分组,则按它们的组合分组,答案已编辑查看组。
    • @CatarinaNogueira - 它仅用于解释外观组的外观;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2014-11-29
    • 2015-02-13
    • 2018-11-22
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多