下面是一个示例代码,展示了如何按列"grp"分组并压缩DataFrame,按列"ord"排序,并取每列最后一个非空值:
import pandas as pd
# 创建示例DataFrame
data = {'grp': ['A', 'A', 'B', 'B', 'C', 'C'],
'ord': [1, 2, 3, 4, 5, 6],
'val1': [10, 20, None, 40, 50, None],
'val2': [100, 200, 300, None, 500, 600]}
df = pd.DataFrame(data)
# 按列"grp"分组并压缩DataFrame
df_grouped = df.groupby('grp').apply(lambda x: x.sort_values('ord').last_valid_index()).reset_index(level=0, drop=True)
df_compressed = df.loc[df_grouped]
# 输出结果
print(df_compressed)
输出结果为:
grp ord val1 val2
1 A 2 20.0 200.0
3 B 4 40.0 NaN
5 C 6 NaN 600.0
在这个示例中,我们首先使用groupby
方法按列"grp"分组。然后,我们使用apply
方法对每个组进行操作,将每个组按列"ord"排序,并取最后一个非空值的行索引。最后,使用loc
方法根据行索引选择压缩后的DataFrame。