使用 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 指令的结果
然后将其保存在迄今为止保存源代码的同一变量下
数据框。
我有一个 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 指令的结果 然后将其保存在迄今为止保存源代码的同一变量下 数据框。