首页 文章

pandas groupby lteration不起作用

提问于
浏览
-1

我根据一些不同的组将数据分成训练集,验证集和测试集 . 目的是这些集合将具有大致相同的不同类别的份额 .

之后,我正在尝试扩展训练集中每列的数据,并对验证和测试集使用相同的转换 . 由于我遍历训练集中的所有数字列,我想我可以同时对不同的组进行均值估算 . 因此,只遍历数字列(要素)一次 .

下面的工作代码用于按列扩展所有功能:

for feature_name in numeric_columns:
    tmp_feature_mean = train[feature_name].mean()
    tmp_feature_std = train[feature_name].std()

    train[feature_name].apply(lambda x: (x-tmp_feature_mean)/tmp_feature_std) # !Works
    val[feature_name].apply(lambda x: (x-tmp_feature_mean)/tmp_feature_std) # !Works
    test[feature_name].apply(lambda x: (x-tmp_feature_mean)/tmp_feature_std) # !Works
    train[feature_name] = (train[feature_name]-tmp_feature_mean)/tmp_feature_std # Works
    val[feature_name] = (val[feature_name]-tmp_feature_mean)/tmp_feature_std # Works
    test[feature_name] = (test[feature_name]-tmp_feature_mean)/tmp_feature_std # Works

应用版本似乎没有做任何事情 .

现在我想做的是用该组的平均值取代NaNs . 我尝试了以下方法:

train_Scaled = train.groupby(['class', 'type'])
val_Scaled = val.groupby(['class', 'type'])
test_Scaled = test.groupby(['class', 'type'])

for feature_name in numeric_columns:
    train_feature_mean = train_Scaled[feature_name].mean()
    print "train_feature_mean: {}".format(train_feature_mean)

    train_feature_std = train_Scaled[feature_name].std()
    print "train_feature_std: {}".format(train_feature_std)

    train_Scaled[feature_name] = (train_Scaled[feature_name]-train_feature_mean)/train_feature_std # ValueError
    val_Scaled[feature_name] = (val_Scaled[feature_name]-train_feature_mean)/train_feature_std
    test_Scaled[feature_name] = (test_Scaled[feature_name]-train_feature_mean)/train_feature_std

    for name, group in train_Scaled:    
        train_feature_group_mean = train_Scaled[feature_name].get_group(name).mean()
        print train_feature_group_mean

        train_feature_group_std = train_Scaled[feature_name].get_group(name).std()
        print train_feature_group_std

因此,对于类和类型的每个组合,我想用该组合的均值填充NaN . 在上面的代码中,我根本没有包含填充,因为我已经遇到了一个问题:

train_Scaled[feature_name] = (train_Scaled[feature_name]-train_feature_mean)/train_feature_std# Works

现在它失败了以前版本中的代码 . 差异可能与分组有关 .

我还测试过首先通过组遍历并通过功能进行迭代 . 这样,我试着像这样填充NaN:train_Scaled [feature_name] .get_group(name).fillna(train_group_feature_mean)

但那没有做任何事情 . 但是,重要的是还要在验证和测试集中使用训练集的组平均值填充NaN .

最后,我希望在“普通”pandas数据帧中进行训练,验证和测试集,而无需任何分组 . 这是一个不好的方式来到那里?我可以遍历每个类和类型的组合来完成它,但是我更喜欢group by可以利用部分迭代,因为我可能想要添加其他列以便稍后进行分组 .

我是蟒蛇和熊猫的新手,所以如果我遇到了一些完全错误的话,我并不感到惊讶 .

1 回答

  • 0

    我实际上用脏的方式解决了它,即只是循环遍历功能,类和类型(循环3) .

    一旦我再次进入 Cloud 端,我就会发布代码 .

相关问题