首页 > 解决方案 > 根据条件在数据框中创建新列

问题描述

对于数据框 df :

dummy_data1 = {'category': ['White', 'Black', 'Hispanic','White'],
           'Pop':['75','85','90','100'],'White_ratio':[0.6,0.4,0.7,0.35],'Black_ratio':[0.3,0.2,0.1,0.45], 'Hispanic_ratio':[0.1,0.4,0.2,0.20]    }
df = pd.DataFrame(dummy_data1, columns = ['category', 'Pop','White_ratio', 'Black_ratio', 'Hispanic_ratio'])

我想通过首先检查类别,然后将 'Pop' 中的值乘以列中相应的比率值来向此数据框添加一个新列“pop_n”。对于第一行,类别为“白色”,因此应将 75 乘以 0.60,并将 45 放入 pop_n 列。我想过写一些类似的东西:

df['pop_n']= (df['Pop']*df['White_ratio']).where(df['category']=='W')

这有效,但仅适用于一个类别。我将不胜感激这方面的任何帮助。

谢谢。

标签: python-3.xpandas

解决方案


使用DataFrame.filterDataFrame.lookup

首先,我们用于filter获取ratio名称中的列。然后拆分并仅保留下划线之前的第一个单词。

最后,我们使用lookupcategory值与这些列匹配。

# df['Pop'] = df['Pop'].astype(int)
df2 = df.filter(like='ratio').rename(columns=lambda x: x.split('_')[0])
df['pop_n'] = df2.lookup(df.index, df['category']) * df['Pop']
   category  Pop  White_ratio  Black_ratio  Hispanic_ratio  pop_n
0     White   75         0.60         0.30             0.1   45.0
1     Black   85         0.40         0.20             0.4   17.0
2  Hispanic   90         0.70         0.10             0.2   18.0
3     White  100         0.35         0.45             0.2   35.0

推荐阅读