假设原始的DataFrame为df,可以按照以下步骤进行精简:

  1. 按照code进行分组,对于每个分组:

  2. 如果只有一行,直接保留。

  3. 如果有多行,先筛选出包含‘增强’的行,如果有多行,则再从中选出规模最大的行。

代码如下:

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
``
python一个df里面包含‘code’、‘name’、‘规模’等字段我想对这个df进行精简原则为如果code相同的行里面如果1‘name’包含‘增强’则选出2选出来的多于一行则再选‘规模’最大的请帮我写下代码

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

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