簡體   English   中英

在循環中基於其他列創建多個新的 pandas 列

[英]Create multiple new pandas column based on other columns in a loop

假設我有以下玩具 dataframe, df

Country     Population    Region          HDI

China        100          Asia           High  
Canada        15          NAmerica     V.High  
Mexico        25          NAmerica     Medium 
Ethiopia      30            Africa        Low

我想根據埃塞俄比亞的人口、地區和 HDI 循環創建新列。 我嘗試了以下方法,但是當涉及到很多列時,它很耗時。

df['Population_2'] = df['Population'][df['Country'] == "Ethiopia"]
df['Region_2'] = df['Region'][df['Country'] == "Ethiopia"]
df['Population_2'].fillna(method='ffill')

我最終的 DataFrame df應該如下所示:

Country     Population    Region         HDI    Population_2   Region_2    HDI_2

China        100          Asia          High      30            Africa       Low 
Canada        15          NAmerica    V.High      30            Africa       Low 
Mexico        25          NAmerica    Medium      30            Africa       Low 
Ethiopia      30            Africa       Low      30            Africa       Low

這個怎么樣?

for col in ['Population', 'Region', 'HDI']:
    df[col + '_2'] = df.loc[df.Country=='Ethiopia', col].iat[0]

我不太了解您要做什么的更廣泛的意義,如果埃塞俄比亞可以有多個價值觀,那么解決方案可能會有所不同。 但這適用於您提出的問題。

您可以使用:

# select Ethiopia row and add suffix "_2" to the columns (except Country)
s = (df.drop(columns='Country')
       .loc[df['Country'].eq('Ethiopia')].add_suffix('_2').squeeze()
     )

# broadcast as new columns
df[s.index] = s

output:

    Country  Population    Region     HDI  Population_2 Region_2 HDI_2
0     China         100      Asia    High            30   Africa   Low
1    Canada          15  NAmerica  V.High            30   Africa   Low
2    Mexico          25  NAmerica  Medium            30   Africa   Low
3  Ethiopia          30    Africa     Low            30   Africa   Low

您可以使用assign並假設您只有對應於Ethiopia的行:

d = dict(zip(df.columns.drop('Country').map('{}_2'.format), 
         df.set_index('Country').loc['Ethiopia']))

df = df.assign(**d)

打印(df):

    Country  Population    Region     HDI  Population_2 Region_2 HDI_2
0     China         100      Asia    High            30   Africa   Low
1    Canada          15  NAmerica  V.High            30   Africa   Low
2    Mexico          25  NAmerica  Medium            30   Africa   Low
3  Ethiopia          30    Africa     Low            30   Africa   Low

暫無
暫無

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

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