【发布时间】:2021-11-09 07:18:32
【问题描述】:
我有一个包含以下 3 列的数据框
ID Department Number
---------------------------------
2324 Art 4
2324 Math 1
2324 Art 3
2400 Science 2
2593 Tech 5
2593 Math 1
我尝试先按 ID 过滤,然后按数字过滤。如您所见,有些 ID 重复。我想先找到重复的ID,然后选择对应的最高的Number。
例如,您可以看到 ID 2324 重复了 3 次。 (4, 1, 3) 是与 2324 的每个条目对应的数字。由于 4 是较大的数字,因此我选择 4 的条目。我想过滤数据框以获得此输出:
ID Department Number
---------------------------------
2324 Art 4
2400 Science 2
2593 Tech 5
这是我目前的代码:
for previous, current in zip(df['ID'], df['ID'][1:]):
for i, j in zip(df['Number'], df['Number'][1:]):
if previous == current:
if j> i:
但是,我不知道应该在print(previous, j) 旁边正确添加什么。
如果我将print(previous, j) 添加到嵌套循环中,我会得到重复的条目。
例如,如果我的代码是
for previous, current in zip(df['ID'], df['ID'][1:]):
for i, j in zip(df['Number'], df['Number'][1:]):
if previous == current:
if j> i:
print(previous, j)
输出
2324 4
2324 4
2324 4
2324 4
2324 4
2324 4
2593 5
2593 5
2593 5
2593 5
我希望它输出:
2324 4
2593 5
我还希望它包含未重复的 ID,因此在本例中为 2400 2。
此外,我不知道如何将正确的部门名称附加到嵌套循环中。
感谢所有花时间阅读本文并帮助我的人。我真的很感激。
【问题讨论】:
-
这可能是您正在寻找的确切解决方案Python Pandas Dataframe select row by max value in group
-
你不需要循环来实现你想要的,你可以先对 Number 列的值进行排序,然后使用 drop_duplciates,如下所示:
df.sort_values(by=['num'], ascending=False)后跟df.drop_duplicates("id", inplace=True),默认情况下, drop_duplicates 将保留第一个条目。
标签: python pandas dataframe nested-loops