我有一个包含所有 int64 类型列的 DataFrame。
City Val ...
0 3 1
1 2 43
2 0 32
3 1 54
然后,我有一个类别名称列表:
names = ['Sydney', 'Tokyo', 'Vancouver', 'Toronto']
我想做的是,根据 names
列表索引,即 0 = 'Sydney' 和 1 = 'Tokyo',用城市名称填充 City 列。
理想的结果:
City Val ...
0 Toronto 1
1 Vancouver 43
2 Sydney 32
3 Tokyo 54
我试过:df['City'].loc[df['City'].isin(names), df['City']]=names.index(df['City'])
,但是报错
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
并且,我想将城市列更改为类别类型。
df['City'] = df['City'].astype('category')
df['City'].cat.set_categories(names, ordered=True, inplace=True)
最佳答案
使用Series.map
使用 enumerate
创建的字典:
names = ['Sydney', 'Tokyo', 'Vancouver', 'Toronto']
df['City'] = df['City'].map(dict(enumerate(names)))
print (df)
City Val
0 Toronto 1
1 Vancouver 43
2 Sydney 32
3 Tokyo 54
详细信息:
print (dict(enumerate(names)))
{0: 'Sydney', 1: 'Tokyo', 2: 'Vancouver', 3: 'Toronto'}
然后对于分类:
df['City'] = pd.CategoricalIndex(df['City'].map(dict(enumerate(names))),
ordered=True,
categories=names)
或者:
df['City'] = (df['City'].map(dict(enumerate(names)))
.astype('category', ordered=True, categories=names))
关于python - 根据 Python 中列表的索引填充 int64 DataFrame 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57089874/