在R中对利润表DataFrame执行过滤、字符串拆分与值替换
处理利润表DataFrame:修正列值并过滤行
问题
给定利润表DataFrame,需完成两项操作:
- 修正
yearly和monthly列的错误值:从income列(格式为年度_月度)拆分出正确数值,覆盖对应列的错误内容 - 过滤出年度收入超过500的行(年度收入指拆分后的年度数值)
原始数据
| ID | yearly | monthly | income |
|---|---|---|---|
| 1 | 100 | 200 | 100_200 |
| 2 | 500 | 100 | 300_100 |
| 3 | 1000 | 500 | 600_500 |
| 4 | 300 | 250 | 500_250 |
期望修正后的数据(未过滤)
| ID | yearly | monthly | income |
|---|---|---|---|
| 1 | 100 | 200 | 100_200 |
| 2 | 300 | 100 | 300_100 |
| 3 | 600 | 500 | 600_500 |
| 4 | 300 | 250 | 500_250 |
解决方案
1. 修正列值
利用str.split()拆分income列,提取正确的年度和月度数值覆盖原列:
import pandas as pd # 构建原始DataFrame df = pd.DataFrame({ 'ID': [1, 2, 3, 4], 'yearly': [100, 500, 1000, 300], 'monthly': [200, 100, 500, 250], 'income': ['100_200', '300_100', '600_500', '500_250'] }) # 拆分income列并转换为整数类型 split_vals = df['income'].str.split('_', expand=True).astype(int) # 覆盖yearly和monthly列的错误值 df['yearly'] = split_vals[0] df['monthly'] = split_vals[1]
2. 过滤行
基于修正后的yearly列,筛选出数值大于500的行:
# 过滤年度收入超过500的行 filtered_df = df[df['yearly'] > 500]
最终过滤结果
| ID | yearly | monthly | income |
|---|---|---|---|
| 3 | 600 | 500 | 600_500 |
若你需要的是仅修正列值、不进行过滤的结果,直接使用修正后的df即可得到你提供的期望输出。
内容的提问来源于stack exchange,提问作者Satyaban Sahoo
相关产品推荐
相关产品推荐

