You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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分组后提取非空值即可,步骤如下:

  1. 若有多个DataFrame,先合并成一个:
# 示例:合并多个DataFrame
combined_df = pd.concat([df1, df2, df3])
  1. 按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:53:19