Python 3.x 基于条件在数据帧中创建新列
对于数据帧df:Python 3.x 基于条件在数据帧中创建新列,python-3.x,pandas,Python 3.x,Pandas,对于数据帧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_da
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”。第一排,,
类别为“白色”,因此应将75乘以0.60,并将45放入pop_n列中。
我想写一些东西,比如:
df['pop_n']= (df['Pop']*df['White_ratio']).where(df['category']=='W')
这只适用于一个类别。
我将非常感谢您的帮助
谢谢。使用和:
首先,我们使用filter
获取名称中带有ratio
的列。然后拆分并仅保留下划线前的第一个单词
最后,我们使用lookup
将category
值与这些列相匹配
# 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']
使用和:
首先,我们使用filter
获取名称中带有ratio
的列。然后拆分并仅保留下划线前的第一个单词
最后,我们使用lookup
将category
值与这些列相匹配
# 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']
找到名称中带有下划线的列:
to_rename = {x: x.split("_")[0] for x in df if "_" in x}
找出匹配因素:
stack = df.rename(columns=to_rename)\
.set_index('category').stack()
factors = stack[map(lambda x: x[0]==x[1], stack.index)]\
.reset_index(drop=True)
将原始数据乘以系数:
df['pop_n'] = df['Pop'].astype(int) * factors
# category Pop White_ratio Black_ratio Hispanic_ratio pop_n
#0 White 75 0.60 0.30 0.1 45
#1 Black 85 0.40 0.20 0.4 17
#2 Hispanic 90 0.70 0.10 0.2 18
#3 White 100 0.35 0.45 0.2 35
找到名称中带有下划线的列:
to_rename = {x: x.split("_")[0] for x in df if "_" in x}
找出匹配因素:
stack = df.rename(columns=to_rename)\
.set_index('category').stack()
factors = stack[map(lambda x: x[0]==x[1], stack.index)]\
.reset_index(drop=True)
将原始数据乘以系数:
df['pop_n'] = df['Pop'].astype(int) * factors
# category Pop White_ratio Black_ratio Hispanic_ratio pop_n
#0 White 75 0.60 0.30 0.1 45
#1 Black 85 0.40 0.20 0.4 17
#2 Hispanic 90 0.70 0.10 0.2 18
#3 White 100 0.35 0.45 0.2 35
感谢回复Erfan,我使用的数据框有更长的类别名称,如白人、黑人、西班牙裔等。我在这里放了一个简化的数据框。如果您能在代码中提及要编辑的部分,我将不胜感激。您能否编辑示例数据,使其代表您的问题。我刚刚做到了,对于给您带来的不便深表歉意!是的!谢谢!感谢回复Erfan,我使用的数据框有更长的类别名称,如白人、黑人、西班牙裔等。我在这里放了一个简化的数据框。如果您能在代码中提及要编辑的部分,我将不胜感激。您能否编辑示例数据,使其代表您的问题。我刚刚做到了,对于给您带来的不便深表歉意!是的!谢谢!