如何定位一个基于多个变量的数据框的子组,并在原数据框中只替换该子组的值?

问题描述 投票:0回答:1

我在Python上是个新手,我在做下面的工作时遇到了一些麻烦。

我有一个数据框,为了分析数据,我必须根据不同的变量进行分组。

   Package Package category Moisture  Length  Height      Packing weight
0      YYS                X  NON DRY    2000     200             200
1      XXS                Y  NON DRY     190      20             200
2      GGT                Z      DRY     350      32             680
3      YYS                X      DRY    1000     209             280
4      YYS                X      DRY    3500     209             280
5      GGT                Z      DRY     350      37             680
6      XXS                Y  NON DRY     345      29             600
7      GGT                Z      DRY     350      37             680
8      GGT                Z      DRY     350      37             680
9      YYS                X      DRY    2000     209             285
10     YYS                X  NON DRY    3400     200             200
11     YYS                X      DRY    2000     209             280
12     XXS                Y  NON DRY     190      23             200
13     XXS                Y  NON DRY     190      23             200
14     GGT                Z  NON DRY     190      23             200
15     XXS                Y  NON DRY     190      23             200
16     GGT                Z  NON DRY     190      23             200
17     XXS                Y  NON DRY     336      20             600
18     XXS                Y  NON DRY     190      23             200  
  1. 为了这个分析,我搜索一个特定的组,使用下面的方法。
data1.loc[(data1['Package category'] == 'X') & (data1['Package'] == 'YYS') & (data1['Moisture'] == 'DRY') 
          & (data1['Length'] == 2000) & (data1['Height'] == 209.0),:]
  1. 从这个特定的组中,我发现 "包装重量 "这一列的值在这个组中是不同的,我想只有一个值,因此我需要替换所有的行,如果该组的280作为包装重量值,则替换为285。所以我使用这个方法。
data1.loc[(data1['Package category'] == 'X') & (data1['Package'] == 'YYS') & (data1['Moisture'] == 'DRY') 
          & (data1['Length'] == 2000) & (data1['Height'] == 209.0),:].replace({280.0:285})

问题是,我想让这个替换显示在我的原始数据框 "data1 "中。但是,如果我使用上面的代码,它只是显示我,因为它已经做了替换,但通过原来的数据框data1,变化并没有做。

我必须对不同的组进行分析,最后,我想让这些变化有效地显示在我的一个原始数据框 "data1 "上,有什么方法可以做到这一点吗?

pandas dataframe replace pandas-groupby locate
1个回答
1
投票

编辑:看完这个。Pandas怎么能在 "loc "之后用 "replace "呢?

我建议如下编辑:让我们调用整个过滤 con (只是为了更清楚地说明,你应该改变它的整个过滤条件)。

data1.loc[con, :] = data1.loc[con,:].replace({280.0:285})

replace 返回一个新的数据帧

© www.soinside.com 2019 - 2024. All rights reserved.