更新pandas groupby()的列值.last()

时间:2017-08-23 17:36:13

标签: python pandas lambda apply pandas-groupby

给定数据框:

@Configuration
@EnableJpaRepositories
public class JPAConfiguration {

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.datasource1")
    public DataSourceProperties firstDataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.datasource1")
    public DataSource firstDataSource() {
        return firstDataSourceProperties().initializeDataSourceBuilder().build();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.datasource2")
    public DataSourceProperties secondDataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.datasource2")
    public DataSource secondDataSource() {
        return secondDataSourceProperties().initializeDataSourceBuilder().build();
    }
}

我可以使用

找到每个A组的最后一个C值
dfd = pd.DataFrame({'A': [1, 1, 2,2,3,3],
                    'B': [4, 5, 6,7,8,9],
                    'C':['a','b','c','c','d','e']
                   })

但是,我想将C值更新为np.nan。我不知道该怎么做。方法如:

dfd.groupby('A').last()['C']

不起作用。

我想要的结果如下:

def replace(df):
    df['C']=np.nan
    return replace

dfd.groupby('A').last().apply(lambda dfd: replace(dfd))

1 个答案:

答案 0 :(得分:4)

IIUIC,您需要loc。使用tail

获取最后一个值的索引
In [1145]: dfd.loc[dfd.groupby('A')['C'].tail(1).index, 'C'] = np.nan

In [1146]: dfd
Out[1146]:
   A  B    C
0  1  4    a
1  1  5  NaN
2  2  6    c
3  2  7  NaN
4  3  8    d
5  3  9  NaN

dfd.loc[dfd.groupby('A').tail(1).index, 'C'] = np.nan也应该没问题。