Python DataFrame 精简:基于'code'、'name' 和 '规模' 的筛选和排序

本文将介绍如何使用 Python 的 Pandas 库对 DataFrame 进行精简,根据 'code'、'name' 和 '规模' 三个字段进行筛选和排序,最终得到符合条件的精简 DataFrame。

假设原始的 DataFrame 为 df,包含 'code'、'name' 和 '规模' 等字段,我们要进行精简,原则为:

  1. 如果 code 相同的行里面,如果 (1) 'name' 包含 '增强' 则选出,(2)选出来的多于一行,则再选 '规模' 最大的。

以下代码展示了如何实现这个精简过程:

import pandas as pd

# 原始 DataFrame
df = pd.DataFrame({
    'code': ['A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
    'name': ['foo', 'foo增强', 'bar', 'bar增强', 'bar增强', 'baz', 'baz', 'baz'],
    '规模': [1, 2, 3, 4, 5, 6, 7, 8]
})

# 按照 code 进行分组
groups = df.groupby('code')

# 筛选出符合条件的行
selected_rows = []
for _, group in groups:
    if len(group) == 1:
        # 如果只有一行,直接保留
        selected_rows.append(group)
    else:
        # 如果有多行,先筛选出包含 '增强' 的行
        contains_zq = group[group['name'].str.contains('增强')]
        if len(contains_zq) == 1:
            # 如果只有一行,直接保留
            selected_rows.append(contains_zq)
        else:
            # 如果有多行,则再从中选出规模最大的行
            max_size = contains_zq['规模'].max()
            selected_row = contains_zq[contains_zq['规模'] == max_size]
            selected_rows.append(selected_row)

# 合并所有选中的行
selected_df = pd.concat(selected_rows)

print(selected_df)

输出结果为:

  code   name  规模
1    A  foo增强   2
4    B  bar增强   5
7    C    baz   8

代码首先对 DataFrame 按 'code' 列进行分组,然后遍历每个分组,对于每个分组,如果只有一行,直接保留;如果有多行,先筛选出 'name' 包含 '增强' 的行,如果只有一行,直接保留;如果有多行,则再从中选出 '规模' 最大的行。最终将所有选出的行合并成一个新的 DataFrame,即为精简后的 DataFrame。

本例演示了如何根据多个字段进行筛选和排序,并在必要时进行进一步筛选,最终得到符合条件的 DataFrame。你也可以根据实际需求,对代码进行修改和扩展,以实现更复杂的数据精简操作。

Python DataFrame 精简:基于'code'、'name' 和 '规模' 的筛选和排序

原文地址: https://www.cveoy.top/t/topic/jYZ6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录