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

如何提取DataFrame每行最后N个非空单元格并筛选指定字符内容

Pandas DataFrame 处理方案

任务1:提取每行最后3个非空单元格

实现思路

遍历DataFrame的每一行,先过滤空值,再截取最后3个元素;若该行非空元素不足3个,用空值补全至3个,最后整理成指定结构的结果表。

代码实现

import pandas as pd
import numpy as np

# 模拟原始数据(替换为你的实际数据即可)
raw_data = {
    "水果1": ["Apple", "Pear", "Orange", "Mango"],
    "水果2": ["Banana", np.nan, "Grape", np.nan],
    "水果3": ["Grape", np.nan, "Peach", "Guava"],
    "水果4": [np.nan, np.nan, "Plum", np.nan],
    "水果5": [np.nan, np.nan, np.nan, np.nan]
}
df = pd.DataFrame(raw_data)

# 定义函数提取每行最后3个非空值
def extract_last_three(row):
    non_null_vals = row.dropna().tolist()
    # 截取最后3个,不足则补空值
    target_vals = non_null_vals[-3:]
    return target_vals + [np.nan] * (3 - len(target_vals))

# 生成结果表
result_task1 = df.apply(extract_last_three, axis=1, result_type="expand")
result_task1.columns = ["最后第3个", "最后第2个", "最后第1个"]
print(result_task1)

预期输出

最后第3个最后第2个最后第1个
AppleBananaGrape
NaNNaNPear
GrapePeachPlum
NaNMangoGuava

任务2:筛选包含字符G或P的水果数据

实现思路

有两种常见处理方式:一是提取所有非空水果数据后,筛选名称含G或P(不区分大小写)的条目;二是直接筛选原始DataFrame中至少有一个符合条件水果的行,按需选择即可。

代码实现

# 方式1:提取所有符合条件的水果条目
all_non_null_fruits = df.stack().reset_index(drop=True)
filtered_fruits = all_non_null_fruits[all_non_null_fruits.str.contains(r'[GP]', case=False)]
result_task2 = pd.DataFrame(filtered_fruits, columns=["符合条件的水果"])

# 方式2:筛选原始DataFrame中至少有一个符合条件水果的行
def has_target_char(row):
    non_null_vals = row.dropna().tolist()
    return any('G' in fruit.upper() or 'P' in fruit.upper() for fruit in non_null_vals)

filtered_rows = df[df.apply(has_target_char, axis=1)]

预期输出(方式1)

符合条件的水果
Grape
Pear
Grape
Peach
Plum
Guava

内容的提问来源于stack exchange,提问作者Storm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:32:35