Python Pandas中合并多DataFrame后的值对齐与排序方法
Pandas 数据合并与排序解决方案
问题场景
现有合并后的DataFrame如下:
import pandas as pd import numpy as np id = ['A','A','A','A','A','A'] date = ['2022-01-01','2022-01-01','2022-01-02','2022-01-02','2022-01-03','2022-01-04'] val1=[1,np.nan,2,np.nan,7,8] val2=[np.nan,3,np.nan,5,np.nan,np.nan] pd.DataFrame({'id':id,'date':date,'val_1':val1,'val_2':val2})
同一日期的val_1与val_2值分散在不同行,还存在仅val_1有值的情况。需要将同id同date的数值合并到同一行,且支持多DataFrame合并后的相同处理;同时需要了解Pandas中的排序方法。
一、合并同日期的数值列
直接通过groupby分组后提取非空值即可,步骤如下:
- 若有多个DataFrame,先合并成一个:
# 示例:合并多个DataFrame combined_df = pd.concat([df1, df2, df3])
- 按
id和date分组,提取各列的第一个非空值:
# 分组合并,自动忽略NaN result_df = combined_df.groupby(['id', 'date'], as_index=False).first()
first()方法会自动跳过NaN,取每组内各列的第一个有效数值,刚好满足将同日期的val_1和val_2合并到同一行的需求,即使某列全为空也会保留NaN,适配仅val_1有值的场景。
二、Pandas 数据排序方法
1. 按列值排序(sort_values)
这是最常用的排序方式,可指定单列或多列,控制升降序:
# 按date列升序排序 sorted_df = result_df.sort_values(by='date', ascending=True) # 多列排序:先按id升序,再按date降序 sorted_df = result_df.sort_values(by=['id', 'date'], ascending=[True, False])
2. 按索引排序(sort_index)
如果需要按行索引排序:
# 默认升序排序索引 sorted_df = result_df.sort_index() # 降序排序索引 sorted_df = result_df.sort_index(ascending=False)
3. 自定义规则排序
如果需要按自定义逻辑排序(比如指定日期顺序),可以用key参数:
# 示例:按自定义日期顺序排序 custom_date_order = ['2022-01-04', '2022-01-03', '2022-01-02', '2022-01-01'] sorted_df = result_df.sort_values( by='date', key=lambda x: x.map({date: idx for idx, date in enumerate(custom_date_order)}) )
内容的提问来源于stack exchange,提问作者stat_man
相关产品推荐
相关产品推荐

