单次扫描创建列表
我想根据另一列的条件,从一列中创建两个列表。目前,我是通过扫描数据表两次来得到这两个列表的。
- 有没有可能只扫描一次就得到这两个列表?
- 能否按各个组来获取列表?
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']