gpt4 book ai didi

python - Pandas 函数用于从数据帧生成系列

转载 作者:行者123 更新时间:2023-11-30 22:56:29 24 4
gpt4 key购买 nike

我想通过使用两列中的值逐行迭代 DataFrame 来生成 Series。像这样的事情:

race_cats = ('White', 'Black', 'Hispanic', 'Other')
def raceParse(row):
if row.hispan != 'Not Hispanic':
return 'Hispanic'
elif row.race == 'White':
return 'White'
elif row.race == 'Black/Negro':
return 'Black'
else:
return 'Other'
df['race4'] = df.map(lambda r: raceParse(r)).astype('category', ordered=False, categories=race_cats)

显然,这不起作用,因为 DataFrame 没有 map 方法。 applyapplymap 按元素工作,而不是按行工作。最好的方法是什么?

最佳答案

您可以使用 loc 实现您想要的结果,如下所示:

# Sample data.
df = pd.DataFrame({'hispan': ['Not Hispanic', 'Not Hispanic', 'Hispanic'], 'race': ['White', 'Black', 'Other']})

>>> df
hispan race
0 Not Hispanic White
1 Not Hispanic Black
2 Hispanic Other

df['race4'] = 'Other'
df.loc[df.race == 'Black', 'race4'] = 'Black'
df.loc[df.race == 'White', 'race4'] = 'White'
df.loc[~df.hispan.isin(['Not Hispanic']), 'race4'] = 'Hispanic'

>>> df
hispan race race4
0 Not Hispanic White White
1 Not Hispanic Black Black
2 Hispanic Other Hispanic

如果您愿意,您可以将该列转换为分类:

df['race4'] = pd.Categorical(df.race4, categories=['White', 'Black', 'Hispanic', 'Other'])

请注意,loc 赋值的顺序很重要。它相当于您的 if row.hispan != 'Not Hispanic': ... elif 结构。通过最后进行西类牙裔测试,它优先于 race 列。

相信上面的回复就是你想要的。就您的要求而言,有一个 iterrows 方法:

def race_parse(row):
if row.hispan != 'Not Hispanic':
return 'Hispanic'
elif row.race == 'White':
return 'White'
elif row.race == 'Black/Negro':
return 'Black'
else:
return 'Other'

df['race4'] = [race_parse(row) for _, row in df.iterrows()]

关于python - Pandas 函数用于从数据帧生成系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36969949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com