单次扫描创建列表

1 投票
1 回答
36 浏览
提问于 2025-04-12 07:54

我想根据另一列的条件,从一列中创建两个列表。目前,我是通过扫描数据表两次来得到这两个列表的。

  1. 有没有可能只扫描一次就得到这两个列表?
  2. 能否按各个组来获取列表?
data = {
    "co2": [95, 90, 99, 104, 105, 94, 99, 104],
    "model": [
        "Citigo",
        "Fabia",
        "Fiesta",
        "Rapid",
        "Focus",
        "Mondeo",
        "Octavia",
        "B-Max",
    ],
    "car": ["Skoda", "Skoda", "Ford", "Skoda", "Ford", "Ford", "BMW", "Ford"],
}

df = pd.DataFrame(data)

# For 2 lists
list_skoda = df.loc[df["car"] == "Skoda", "model"].tolist()
print(f"{list_skoda=}")

list_others = df.loc[df["car"] != "Skoda", "model"].tolist()
print(f"{list_others=}")

# For individual groups
df.groupby(["car"]).apply(print)
l = df.groupby(["car"])["model"].groups

print(f"{l=}") # This gives indices not names

请给点建议。

1 个回答

1

你可以通过一个简单的语句来实现你想要的效果,方法是根据car的值是否是Skoda来进行分组:

m = df["car"] == "Skoda"
list_others, list_skoda = df['model'].groupby(m).agg(list).to_list()
print(list_skoda, list_others, sep='\n')

输出结果:

['Citigo', 'Fabia', 'Rapid']
['Fiesta', 'Focus', 'Mondeo', 'Octavia', 'B-Max']

撰写回答