如何创建引用列表的DataFrame列并赋值

1 投票
1 回答
40 浏览
提问于 2025-04-12 19:16

看起来我的问题和其他一些问题有点相似,但我找不到完全符合我问题的答案,所以如果我没有找到这个特定的答案,我先表示歉意。这个问题有点类似,但我不想把一个列表作为新列的值,我想把对应列表的名字作为列的值。

比如,有这样一个数据框:

d = {'name': ['Tom', 'Patrick', 'Lamar'], 'rating': [100, 97, 95]}
df = pd.DataFrame(data=d)
print(df)

还有这样一组列表:

tier1 = ['Tom', 'Patrick']
tier2 = ['Lamar']

我想高效地创建一个新的“tier”列,像这样:

d = {'name': ['Tom', 'Patrick', 'Lamar'], 'rating': [100, 97, 95], 'tier': [1, 1, 2]}
df = pd.DataFrame(data=d)
print(df)

我的实际数据框大约有300行,我有11个层级列表。我最开始把这个问题当作循环问题来处理,但不太确定如何使用pd.iterrows()来遍历数据框的行,检查“name”列,找到它属于哪个层级列表,然后把层级赋值给新列。我看到过类似的问题,人们使用字典而不是列表,所以我把我的层级列表转换成了一个字典,如下所示:

tier_dict = {
    1: tier1,
    2: tier2
}
print(tier_dict)

但我发现大多数例子都是用列变量与字典中的键匹配,然后把值赋给列,而在我的情况下,我想把键作为新列的值,这就是我现在的困境。谢谢任何帮助!

1 个回答

1
import pandas as pd
d = {'name': ['Tom', 'Patrick', 'Lamar'], 'rating': [100, 97, 95]}
df = pd.DataFrame(data=d)

tier1 = ['Tom', 'Patrick']
tier2 = ['Lamar']

接下来,我们要创建一个字典,用来检查名字和等级之间的关系。

tier_dict = {tier: idx + 1 for idx, tier_list in enumerate([tier1, tier2]) for tier in tier_list}

最后一步是利用这个字典来创建一个新的列。

df['tier'] = df['name'].map(tier_dict)

print(df)

输出结果应该是这样的。

      name  rating  tier
0      Tom     100     1
1  Patrick      97     1
2    Lamar      95     2

撰写回答