合并多个DataFrame并筛选所有Vaule均大于0的卖家数据
多DataFrame合并并过滤卖家的实现方案
核心思路
- 先将所有结构一致的DataFrame纵向合并,统一整合数据
- 筛选出所有日期对应的Value均大于0的卖家
- 将筛选后的数据转换为宽表格式
代码实现
假设你的DataFrame结构如下(以df1、df2为例):
import pandas as pd # 示例测试数据 df1 = pd.DataFrame({ 'Date': ['2024-01-01']*3, 'Seller': ['Alice', 'Bob', 'Hari'], 'Value': [100, 50, 30] }) df2 = pd.DataFrame({ 'Date': ['2024-01-02']*3, 'Seller': ['Alice', 'Bob', 'Hari'], 'Value': [80, 60, 0] })
1. 合并所有目标DataFrame
# 可扩展到更多DataFrame,比如pd.concat([df1, df2, df3, ...]) merged_df = pd.concat([df1, df2], ignore_index=True)
2. 筛选符合条件的卖家
# 分组校验每个卖家的所有Value是否都大于0 valid_sellers = merged_df.groupby('Seller')['Value'].apply(lambda x: (x > 0).all()).reset_index() valid_sellers = valid_sellers[valid_sellers['Value'] == True]['Seller'].tolist() # 过滤出仅包含有效卖家的数据 filtered_df = merged_df[merged_df['Seller'].isin(valid_sellers)]
3. 转换为宽表格式
# 转宽表:卖家为行、日期为列、Value为单元格值 wide_df = filtered_df.pivot(index='Seller', columns='Date', values='Value').reset_index() # 清除列名的层级标签,让格式更简洁 wide_df.columns.name = None
最终得到的wide_df结果如下(示例中Hari因存在Value=0被排除):
Seller 2024-01-01 2024-01-02 0 Alice 100 80 1 Bob 50 60
内容的提问来源于stack exchange,提问作者harry
相关产品推荐
相关产品推荐

