python一个df里面包含‘code’、‘name’、‘规模’等字段我想对这个df进行精简原则为如果code相同的行里面如果1‘name’包含‘增强’则选出2选出来的多于一行则再选‘规模’最大的请帮我写下代码
假设原始的DataFrame为df,可以按照以下步骤进行精简:
-
按照code进行分组,对于每个分组:
-
如果只有一行,直接保留。
-
如果有多行,先筛选出包含‘增强’的行,如果有多行,则再从中选出规模最大的行。
代码如下:
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
``
原文地址: https://www.cveoy.top/t/topic/cxtx 著作权归作者所有。请勿转载和采集!