Gio*_*elm 8 python numpy dataframe pandas
我有一个这样的数据框:
ID type value
1 A 8
2 A 5
3 B 11
4 C 12
5 D 1
6 D 22
7 D 13
Run Code Online (Sandbox Code Playgroud)
我想过滤数据框,以便我有一个唯一出现的“类型”属性(例如 A 只出现一次),如果有更多的行具有相同的“类型”值,我想选择具有更高值的行. 我想得到类似的东西:
ID type value
1 A 8
3 B 11
4 C 12
6 D 22
Run Code Online (Sandbox Code Playgroud)
我如何用熊猫做到这一点?
一种方法是对数据框进行排序,然后在 groupby 之后取第一个。
# first way
sorted = df.sort_values(['type', 'value'], ascending = [True, False])
first = sorted.groupby('type').first().reset_index()
Run Code Online (Sandbox Code Playgroud)
另一种方式不一定只取第一个,因此可能会使所有 ID 对应于相同的最大值(而不是只取其中的一个)
# second way
grouped = df.groupby('type').agg({'value': max}).reset_index()
grouped = grouped.set_index(['type','value'])
second = grouped.join(df.set_index(['type', 'value']))
Run Code Online (Sandbox Code Playgroud)
例子:
数据
ID type value
1 A 8
2 A 5
3 B 11
4 C 12
5 D 1
6 D 22
7 D 13
8 D 22
Run Code Online (Sandbox Code Playgroud)
第一种方法导致
type ID value
A 1 8
B 3 11
C 4 12
D 6 22
Run Code Online (Sandbox Code Playgroud)
第二种方法保持 ID=8
ID
type value
A 8 1
B 11 3
C 12 4
D 22 6
22 8
Run Code Online (Sandbox Code Playgroud)
(reset_index()如果你不喜欢多索引,你可以再次在这里)
df[['type', 'value']].drop_duplicates(subset=['type'])
Run Code Online (Sandbox Code Playgroud)
这通常有效,如果你有更多的列,你可以选择感兴趣的列,在我们的例子中我们选择了所有,“类型”,“值”。
| 归档时间: |
|
| 查看次数: |
9962 次 |
| 最近记录: |