Python 使用复杂条件求和逻辑在数据帧中创建新字段
下面是我的表(Python数据框架)。我正在尝试用紫色文本创建最后一列 下面是我想要实现的逻辑:Python 使用复杂条件求和逻辑在数据帧中创建新字段,python,if-statement,sum,conditional-statements,pandas-groupby,Python,If Statement,Sum,Conditional Statements,Pandas Groupby,下面是我的表(Python数据框架)。我正在尝试用紫色文本创建最后一列 下面是我想要实现的逻辑: 对于每个唯一的“cbsa”值,如果关联的“zip”字段值都相同,则将“age_HC01_EST_VC31_2”字段设置为“age_HC01_EST_VC31”字段(请参见以黄色突出显示的行) 对于每个唯一的“cbsa”值,如果关联的“zip”字段值不同,则将“age_HC01_EST_VC31_2”字段设置为等于“age_HC01_EST_VC31”字段值之和(请参见以橙色突出显示的行) 对于每个
我尝试使用groupby,然后在“cbsa”字段上求和。。。但是对于我试图实现的特定的、多层次的逻辑,它不起作用 如果我没有弄错的话,您的逻辑可以总结如下:对于每个唯一的“cbsa”值,将“age_HC01_EST_VC31_2”字段设置为唯一的“age_HC01_EST_VC31”字段值之和 如果这是正确的,这里有一种方法:第一组由
cbsa
,找到唯一的age\u HC01\u EST\u VC31
值并将这些值相加
import pandas as pd
dic = {'zip': [57401, 57401, 57401, 57401, 98520, 98550, 79604, 79602, 79602, 79601],
'age_HC01_EST_VC31': [15.5, 15.5, 15.5, 15.5, 13.5, 17.3, 14.9, 18, 18, 11],
'cbsa': [10100, 10100, 10100, 10100, 10140, 10140, 10180, 10180, 10180, 10180]}
df = pd.DataFrame(dic)
df.join(df.groupby('cbsa').age_HC01_EST_VC31.unique().apply(sum), on='cbsa', rsuffix='_2')
# age_HC01_EST_VC31 cbsa zip age_HC01_EST_VC31_2
# 0 15.5 10100 57401 15.5
# 1 15.5 10100 57401 15.5
# 2 15.5 10100 57401 15.5
# 3 15.5 10100 57401 15.5
# 4 13.5 10140 98520 30.8
# 5 17.3 10140 98550 30.8
# 6 14.9 10180 79604 43.9
# 7 18.0 10180 79602 43.9
# 8 18.0 10180 79602 43.9
# 9 11.0 10180 79601 43.9
这是一段很长的路,但是完成了工作(您需要重命名年龄列-我刚刚称之为age1)
也许还有其他简单的方法。但这也行得通
df['new_column']="" #Initialise and empty column
#iterate through all unique values
for item in df['cbsa'].unique():
if len(df['zip'].loc[df['cbsa']==item].unique())==1:
df['new_column'].loc[df['cbsa']==item] = df['age_HC01_EST_VC31'].loc[df['cbsa']==item]
else:
df['new_column'].loc[df['cbsa']==item] = sum(df['age_HC01_EST_VC31'].loc[df['cbsa']==item].unique())
grouped = df.groupby(['cbsa','zip'])[['age1']].mean().reset_index()
summed = grouped.groupby(['cbsa'])[['age1']].sum().reset_index()
df = pd.merge(df, summed, how='left', on='cbsa')