使用 Pandas groupby.apply 删除重复时出错

Error in using Pandas groupby.apply to drop duplication

我有一个 Pandas 数据框,其中有一些重复值,而不是行。我想使用 groupby.apply 删除重复项。举例如下。

df = pd.DataFrame([['a', 1, 1], ['a', 1, 2], ['b', 1, 1]], columns=['A', 'B', 'C'])
   A  B  C
0  a  1  1
1  a  1  2
2  b  1  1

# My function
def get_uniq_t(df):
    if df.shape[0] > 1:
        df['D'] = df.C * 10 + df.B
        df = df[df.D == df.D.max()].drop(columns='D')
    return df

df = df.groupby('A').apply(get_uniq_t)

然后我收到以下值错误消息。这个问题似乎与创建新的 D 列有关。如果我在函数外部创建 D 列,代码似乎 运行 没问题。有人可以帮助解释导致值错误消息的原因吗?

ValueError: Shape of passed values is (3, 3), indices imply (2, 3)

您的代码存在问题,它试图修改 原组。

另一个问题是这个函数应该return一个单行 不是数据框。

将您的函数更改为:

def get_uniq_t(df):
    iMax = (df.C * 10 + df.B).idxmax()
    return df.loc[iMax]

然后它的应用returns:

   A  B  C
A         
a  a  1  2
b  b  1  1

根据评论进行编辑

在我看来,不允许修改组, 因为它会间接修改原始 DataFrame。

至少它显示了一个警告,被认为是一种不好的做法。 在 Web 上搜索 SettingWithCopyWarning 以获得更详尽的说明。

我的代码(get_uniq_t 函数)不会 修改原始组。 当前组中只有 returns one 行。

returned 行是根据哪一行 returns 的最大值来选择的 df.C * 10 + df.B 个。所以当你应用这个函数时,结果是一个新的 DataFrame,连续行等于此函数的结果 对于连续的组。

你可以执行等同于修改的操作,当你 创建一些新内容,例如作为 groupby 指令的结果 然后将其保存在迄今为止保存源代码的同一变量下 数据框。