如何提取在子集的子集中具有最大行值的数据帧的子集?
How to extract subset of a dataframe that has the largest maximum row value within a subset of a subset?
我有一个数据框 (df),其中包含沿河流的数据点,其中每个流域 (Basin ID) 包含多条河流 (River ID),并且每条河流沿其长度 (Length) 都有点。它看起来像这样(简化):
Basin_ID
River_ID
Length
1
1
5
1
1
10
1
2
5
1
2
7
1
2
12
1
3
5
2
1
5
2
1
10
2
1
12
2
1
14
2
2
5
在此示例中,流域 1 有 3 条河流,流域 2 有两条河流。实际 table 有 600K 行和 12 列其他河流数据。
Objective: 我想为 df 中的每个独特流域提取单个最长的河流子集,这样我最终得到这样的结果:
Basin_ID
River_ID
Length
1
2
5
1
2
7
1
2
12
2
1
5
2
1
10
2
1
12
2
1
14
我假设我需要做类似
的事情
res = df.groupby('Basin_ID').apply(lambda x: ...
但是因为我需要同时按 Basin_ID 和 River_ID 进行分组,所以我发现很难想出一个可以正常工作的表达式。
欢迎任何建议,谢谢!
df2=df.assign(maxRiverLength=df.groupby('Basin_ID').transform(lambda x: x.max())['Length']).set_index(['Basin_ID','River_ID'])
df.set_index(['Basin_ID','River_ID']).loc[df2[df2['Length']==df2['maxRiverLength']].index].reset_index()
可能有更聪明的方法,但我分两步重现了您的输出:
我首先创建一个包含每个 Basin_ID 的 maxRiverLength 的新列,并将其分配给 df2,在其中我将索引设置为 Basin_ID 和 River_ID:
然后我取原来的df,把index也设为Basin_ID和River_ID
并按 'Length' = 'maxRiverLength'
的 df2 索引过滤
我有一个数据框 (df),其中包含沿河流的数据点,其中每个流域 (Basin ID) 包含多条河流 (River ID),并且每条河流沿其长度 (Length) 都有点。它看起来像这样(简化):
Basin_ID | River_ID | Length |
---|---|---|
1 | 1 | 5 |
1 | 1 | 10 |
1 | 2 | 5 |
1 | 2 | 7 |
1 | 2 | 12 |
1 | 3 | 5 |
2 | 1 | 5 |
2 | 1 | 10 |
2 | 1 | 12 |
2 | 1 | 14 |
2 | 2 | 5 |
在此示例中,流域 1 有 3 条河流,流域 2 有两条河流。实际 table 有 600K 行和 12 列其他河流数据。
Objective: 我想为 df 中的每个独特流域提取单个最长的河流子集,这样我最终得到这样的结果:
Basin_ID | River_ID | Length |
---|---|---|
1 | 2 | 5 |
1 | 2 | 7 |
1 | 2 | 12 |
2 | 1 | 5 |
2 | 1 | 10 |
2 | 1 | 12 |
2 | 1 | 14 |
我假设我需要做类似
的事情res = df.groupby('Basin_ID').apply(lambda x: ...
但是因为我需要同时按 Basin_ID 和 River_ID 进行分组,所以我发现很难想出一个可以正常工作的表达式。 欢迎任何建议,谢谢!
df2=df.assign(maxRiverLength=df.groupby('Basin_ID').transform(lambda x: x.max())['Length']).set_index(['Basin_ID','River_ID'])
df.set_index(['Basin_ID','River_ID']).loc[df2[df2['Length']==df2['maxRiverLength']].index].reset_index()
可能有更聪明的方法,但我分两步重现了您的输出:
我首先创建一个包含每个 Basin_ID 的 maxRiverLength 的新列,并将其分配给 df2,在其中我将索引设置为 Basin_ID 和 River_ID:
然后我取原来的df,把index也设为Basin_ID和River_ID 并按 'Length' = 'maxRiverLength'
的 df2 索引过滤