如何用Python在Pandas DataFrame中查找并汇总特定字符串
Pandas DataFrame添加汇总列解决方案
问题回顾
你需要给现有DataFrame新增两列:
- 第一列:汇总每行所有包含字符串
Gra的非空记录 - 第二列:记录每行最后一条非空的有效记录
错误原因
你之前用iteritems()遍历的是DataFrame的列,而非行,所以只会输出整列数据,无法实现按行的筛选和提取操作。
实现代码
1. 导入依赖并构造示例数据(如果已有DataFrame可跳过)
import pandas as pd # 模拟你的原始DataFrame data = { "Well ID": [100, 101], "1": ["1 to 2 Gra", "1 to 3 Blu"], "2": ["4 to 5 Blu Gra", "3 to 6 Gra"], "3": ["5 to 7 Red", pd.NA], "50": [pd.NA, pd.NA] } df_gravel = pd.DataFrame(data)
2. 添加"Gra"汇总列
通过apply按行处理,筛选每行非空且包含Gra的记录,组成列表:
search_word = "Gra" df_gravel["Gra"] = df_gravel.apply( lambda row: [val for val in row if pd.notna(val) and search_word in str(val)], axis=1 # axis=1表示按行处理 )
3. 添加"Last Record"列
提取每行最后一个非空值,若整行为空则返回pd.NA:
df_gravel["Last Record"] = df_gravel.apply( lambda row: row.dropna().iloc[-1] if not row.dropna().empty else pd.NA, axis=1 )
最终结果
运行后你的DataFrame会变成:
| Well ID | 1 | 2 | 3 | 50 | Gra | Last Record |
|---|---|---|---|---|---|---|
| 100 | 1 to 2 Gra | 4 to 5 Blu Gra | 5 to 7 Red | NaN | ['1 to 2 Gra', '4 to 5 Blu Gra'] | 5 to 7 Red |
| 101 | 1 to 3 Blu | 3 to 6 Gra | NaN | NaN | ['3 to 6 Gra'] | 3 to 6 Gra |
内容的提问来源于stack exchange,提问作者mylesmoose
相关产品推荐
相关产品推荐

