簡體   English   中英

根據Python中列表的索引填充int64 DataFrame列

[英]Populate an int64 DataFrame column based on index of a list in Python

我有一個帶有所有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 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.mapenumerate創建的字典一起使用:

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM