根据特定列比较数据集中的行以查找 min/max
Comparing rows in dataset based on a specific column to find min/max
所以我有一个 dataset
,其中包含特定标签从开始日期到结束日期的历史记录。我正在尝试根据日期列比较行,如果它们在月、日和年方面相似,我将通过下一列的值将它们添加到临时列表中,然后一旦我通过类似的方式获得这些项目日期,我将获取该列表并找到 min/max
值减去它们,然后将结果添加到另一个列表并清空 temp_list
以重新开始。
为了时间和简单起见,我只提供一个二维列表的例子。这是我的示例数据
dataset = [[1,5],[1,6],[1,10],[1,23],[2,4],[2,8],[2,12],[3,10],[3,20],[3,40],[4,50],[4,500]]
第一列将充当 dates
,第二列将充当 value
。
我遇到的问题是:
- 我似乎无法根据第一列比较每一行,这将采用第二列中的值并将其包含在临时列表中以执行 min/max 操作?
- 基于上面的二维列表,我希望得到
[18,8,30,450]
但结果是 [5,4,10]
dataset = [[1,5],[1,6],[1,10],[1,23],[2,4],[2,8],[2,12],[3,10],[3,30],[3,40],[4,2],[4,5]]
temp_list = []
daily_total = []
for i in range(len(dataset)-1):
if dataset[i][0] == dataset[i+1][0]:
temp_list.append(dataset[i][1])
else:
max_ = max(temp_list)
min_ = min(temp_list)
total = max_ - min_
daily_total.append(total)
temp_list = []
print([x for x in daily_total])
尝试:
tmp = {}
for d, v in dataset:
tmp.setdefault(d, []).append(v)
out = [max(v) - min(v) for v in tmp.values()]
print(out)
打印:
[18, 8, 30, 450]
这是一个使用 pandas 的解决方案:
import pandas as pd
dataset = [
[1, 5],
[1, 6],
[1, 10],
[1, 23],
[2, 4],
[2, 8],
[2, 12],
[3, 10],
[3, 20],
[3, 40],
[4, 50],
[4, 500],
]
df = pd.DataFrame(dataset)
df.columns = ["date", "value"]
df = df.groupby("date").agg(min_value=("value", "min"), max_value=("value", "max"))
df["res"] = df["max_value"] - df["min_value"]
df["res"].to_list()
输出:
[18, 8, 30, 450]
所以我有一个 dataset
,其中包含特定标签从开始日期到结束日期的历史记录。我正在尝试根据日期列比较行,如果它们在月、日和年方面相似,我将通过下一列的值将它们添加到临时列表中,然后一旦我通过类似的方式获得这些项目日期,我将获取该列表并找到 min/max
值减去它们,然后将结果添加到另一个列表并清空 temp_list
以重新开始。
为了时间和简单起见,我只提供一个二维列表的例子。这是我的示例数据
dataset = [[1,5],[1,6],[1,10],[1,23],[2,4],[2,8],[2,12],[3,10],[3,20],[3,40],[4,50],[4,500]]
第一列将充当 dates
,第二列将充当 value
。
我遇到的问题是:
- 我似乎无法根据第一列比较每一行,这将采用第二列中的值并将其包含在临时列表中以执行 min/max 操作?
- 基于上面的二维列表,我希望得到
[18,8,30,450]
但结果是[5,4,10]
dataset = [[1,5],[1,6],[1,10],[1,23],[2,4],[2,8],[2,12],[3,10],[3,30],[3,40],[4,2],[4,5]]
temp_list = []
daily_total = []
for i in range(len(dataset)-1):
if dataset[i][0] == dataset[i+1][0]:
temp_list.append(dataset[i][1])
else:
max_ = max(temp_list)
min_ = min(temp_list)
total = max_ - min_
daily_total.append(total)
temp_list = []
print([x for x in daily_total])
尝试:
tmp = {}
for d, v in dataset:
tmp.setdefault(d, []).append(v)
out = [max(v) - min(v) for v in tmp.values()]
print(out)
打印:
[18, 8, 30, 450]
这是一个使用 pandas 的解决方案:
import pandas as pd
dataset = [
[1, 5],
[1, 6],
[1, 10],
[1, 23],
[2, 4],
[2, 8],
[2, 12],
[3, 10],
[3, 20],
[3, 40],
[4, 50],
[4, 500],
]
df = pd.DataFrame(dataset)
df.columns = ["date", "value"]
df = df.groupby("date").agg(min_value=("value", "min"), max_value=("value", "max"))
df["res"] = df["max_value"] - df["min_value"]
df["res"].to_list()
输出:
[18, 8, 30, 450]