如何创建引用列表的DataFrame列并赋值
看起来我的问题和其他一些问题有点相似,但我找不到完全符合我问题的答案,所以如果我没有找到这个特定的答案,我先表示歉意。这个问题有点类似,但我不想把一个列表作为新列的值,我想把对应列表的名字作为列的值。
比如,有这样一个数据框:
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