使用pandas groupby().last()更新列值

3

给定数据框:

dfd = pd.DataFrame({'A': [1, 1, 2,2,3,3],
                    'B': [4, 5, 6,7,8,9],
                    'C':['a','b','c','c','d','e']
                   })

我可以使用以下方法找到每个 A 组的最后一个 C 值:

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

然而,我想将C值更新为np.nan,但我不知道如何操作。有以下方法:

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

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

不能工作。

我想要的结果是:

dfd_result= pd.DataFrame({'A': [1, 1, 2,2,3,3],
                    'B': [4, 5, 6,7,8,9],
                    'C':['a',np.nan,'c',np.nan,'d',np.nan]
                   })
1个回答

7
根据上下文理解,可能的翻译如下:

在我看来,你需要使用 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 也应该可以。

该代码段为Python代码,作用是将DataFrame对象 dfd 中每个分组的最后一行的列'C'的值设置为 NaN。

请查看我的更新示例,其中C列不包含数字。 - Kevin
谢谢。我认为您已经轻微地更改了代码。我会稍后尝试并告诉您结果。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接