【问题标题】:Combine lists within a list based on conditionals根据条件组合列表中的列表
【发布时间】:2020-08-26 10:43:11
【问题描述】:

我正在尝试创建一个 for 循环来根据条件组合列表中的列表。

我的数据集有 300 条宠物记录。有 3 种动物(例如狗、猫、鸟),每个动物出生年份的间隔(例如(1990、2000]、(2000、2004] 等)和友好仪表的间隔为每只动物评分(例如 (0,2]、(2, 4]、(4, 6] 等))

可以在此处找到数据集外观的示例图像: https://i.stack.imgur.com/YwbGN.png

我用来组合友好仪表评级的当前代码如下:

friendly_meter_combos = []
combo = []

for val in df['friendly_meter'].unique():
    if len(combo) < 2:
        combo.append(val)
    else:
        friendly_meter_combos.append(combo)
        combo = []
        combo.append(val)

这为我提供了

的示例结果
friendly_meter_combos = 
[[(0, 2], (2, 4]],
 [(4, 6], (6, 8]],
 [(8, 10], (2, 4]], 
 [(4, 6], (6, 8]],
 ...]. 

正如您在我打印的倒数第二行中看到的那样,数字从头开始 ([(8, 10], (2, 4]])。这是因为我现在处于不同的年份间隔为数据集中相同的动物类型而生。我想弄清楚如何重新开始代码以获得下面的输出

friendly_meter_combos = 
[[(0, 2], (2, 4]],
 [(4, 6], (6, 8]],
 [(8, 10]], 
 [(2, 4], (4, 6]],
 ...]. 

任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 原始数据框是什么样的?你可以通过df.head() 得到这个
  • 您可以发布您的数据样本吗? 5行就可以了
  • 刚刚添加到带有数据图像的链接中。谢谢!

标签: python pandas list loops conditional-statements


【解决方案1】:

据我了解,您希望获得连续“友好仪表”的组合

# let's suppose unique_values is a list containing ordered friendly meters
unique_values = [ [0, 2], [2, 4], [4, 6], [6, 8], [8, 10] ]
# n is the size of the combo 
n = 2
# use statement below
friendly_meter_combos = list(zip(*(unique_values[i:] for i in range(n))))

结果是: [([0, 2], [2, 4]), ([2, 4], [4, 6]), ([4, 6], [6, 8]), ([6, 8], [8, 10])]

【讨论】:

  • 您好 Cherif,感谢您的回答。我实际上希望在新的 year_born 间隔开始后重新开始间隔。在我的实际数据集中,基于类型 + year_born 的间隔不是那么干净和非常特别,所以我需要代码循环遍历这些数据点作为条件重新启动友好仪表间隔列表,如果这有意义吗?跨度>
  • 首先,unqiue() 方法不会产生有序的数据框列值。你确定你的df是按“年”和“米”排序的吗?如果你能告诉我friendly_meter_combos的用途,也许我们可以找到另一种方法来解决这个问题。
  • 感谢您的提问!我在运行循环之前对 df 进行了排序,所以它应该按顺序进行。总体而言,我正在尝试组合箱以在每种类型中包含 15 条记录。首先我需要结合友好的仪表,然后进入year_born。例如,如果只有 6 条记录是 Type = Dog,year_born = (1990, 2000] 和友好的 Meter=(0, 2] 我想结合下一个有 9 条 Type = Dog 记录的类别, year_born = (1990, 2000] and friendly Meter=(2, 4] 所以我的新数据是 Type = Dog, year_born = (1990, 2000] and friendly Meter=[(0, 4]] 总共有 15 条记录。
  • 也许,在这种情况下,最好通过 ( ["type", "year_born"] ) 对您的 df 进行 groubBy,然后使用适当的函数聚合到组对象。 link
猜你喜欢
  • 2014-03-07
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2023-03-11
  • 1970-01-01
  • 2019-01-11
相关资源
最近更新 更多