pandas 基于数据块分隔符的 Dataframe 排序

gojuced7  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(87)

我想对由行分隔的数据块组成的dataframe执行排序。应该对每个数据块单独执行排序,这样我就可以得到列2的最大值。下面是一个例子:
| ID|第1栏|第2栏|
| --------------|--------------|--------------|
| 案例1|||
| 1|1|七|
| 二|二|二|
| 三|三|四|
| 案例二|||
| 1|1|四|
| 二|二|六|
| 三|三|三|
我想知道是否有可能执行这样的排序,然后在每种情况下获得具有最高值的行?我希望得到如下结果:
| ID|第1栏|第2栏|
| --------------|--------------|--------------|
| 案例1|||
| 1|1|七|
| 三|三|四|
| 二|二|二|
| 案例二|||
| 二|二|六|
| 1|1|四|
| 三|三|三|
| 摘要|||
| 案件|ID|列2的值|
| 1|1|七|
| 二|二|六|
有没有可能在Pandas中做到这一点,或者我需要使用xarray吗?如果需要使用xarray,那么有没有什么聪明的方法将dataframe转换为xarray对象?我已经尝试将dataframe移动到xarray,但是我不太明白这是如何工作的。
最好的问候!

cgfeq70w

cgfeq70w1#

您可以对groupby.idxmaxconcat使用自定义聚合:

m = df['Column 1'].notna()
group = df['ID'].mask(m).ffill()

idx = df[m].groupby(group)['Column 2'].idxmax()

out = pd.concat([df,
                 pd.DataFrame([['Summary'],
                               ['Case', 'ID', 'Value of column 2']],
                              columns=df.columns),
                 df.loc[idx].assign(Case=group)
                    [['Case', 'ID', 'Column 2']]
                   .set_axis(df.columns, axis=1)],
                ignore_index=True
                ).fillna('')

输出:

ID Column 1           Column 2
0    Case 1                            
1         1      1.0                7.0
2         2      2.0                2.0
3         3      3.0                4.0
4    Case 2                            
5         1      1.0                4.0
6         2      2.0                6.0
7         3      3.0                3.0
8   Summary                            
9      Case       ID  Value of column 2
10   Case 1        1                7.0
11   Case 2        2                6.0

相关问题