如何在Day.Number列当前行值小于上一行时合并对应两行数据
实现逻辑
- 逐行遍历数据集,若当前行
Day.Number小于上一行的Day.Number,则合并两行 - 合并规则:
Day.Number取两行最大值,其余数值列取两行对应值之和 - 合并完成后跳过当前行,继续后续判断
代码实现(Python + Pandas)
import pandas as pd # 构造示例数据集,你也可以替换为read_csv读取本地文件 data = { "Day.Number": [1, 2, 3, 1, 2], "Steps": [3800, 7372, 10259, 1798, 5193], "Sleep": [6622, 33346, 10914, 8298, 14859], "Moderate": [5631, 8499, 11750, 2667, 6795], "Vigorous": [32, 0, 73, 0, 0] } df = pd.DataFrame(data) # 合并处理逻辑 res = [] for _, row in df.iterrows(): if not res: res.append(row.to_dict()) continue last = res[-1] if row["Day.Number"] < last["Day.Number"]: # 符合合并条件,替换最后一行为合并结果 res[-1] = { "Day.Number": max(last["Day.Number"], row["Day.Number"]), "Steps": last["Steps"] + row["Steps"], "Sleep": last["Sleep"] + row["Sleep"], "Moderate": last["Moderate"] + row["Moderate"], "Vigorous": last["Vigorous"] + row["Vigorous"] } else: res.append(row.to_dict()) # 输出结果 result = pd.DataFrame(res) print(result)
运行输出
Day.Number Steps Sleep Moderate Vigorous 0 1 3800 6622 5631 32 1 2 7372 33346 8499 0 2 3 12057 19212 14417 73 3 2 5193 14859 6795 0
内容的提问来源于stack exchange,提问作者Miguel Angel Numa
相关产品推荐
相关产品推荐

