下面是我的表格(Python数据帧)。我正在尝试用紫色文本创建最后一列。
以下是我想要实现的逻辑:
对于每个唯一的'cbsa'值,如果关联的'zip'字段值都相同,则将'age_HC01_EST_VC31_2'字段设置为等于'age_HC01_EST_VC31'字段(请参阅以黄色突出显示的行)。
对于每个唯一的'cbsa'值,如果关联的'zip'字段值不同,则将'age_HC01_EST_VC31_2'字段设置为等于'age_HC01_EST_VC31'字段值的总和(请参阅以橙色突出显示的行)。
对于每个唯一的'cbsa'值,如果关联的'zip'字段值有些相同且有些不同,则将'age_HC01_EST_VC31_2'字段设置为等于UNIQUE'age_HC01_EST_VC31'字段值的总和(请参阅行以蓝色突出显示。
我尝试过使用groupby然后总结'cbsa'字段...但它不适用于我正在尝试实现的特定的多层逻辑。
答案 0 :(得分:1)
"_links": {
"user": {
"href": "http://localhost:8080/api/users/1",
"title": "Utente"
}
}
"users": {
"href": "http://localhost:8080/api/users{?page,size,sort}",
"templated": true,
"title": "Lista utenti"
}
答案 1 :(得分:0)
如果我没有弄错的话,你的逻辑可归纳如下:对于每个独特的“cbsa”'值,设置' age_HC01_EST_VC31_2'字段等于UNIQUE' age_HC01_EST_VC31'的总和字段值。
如果这是正确的,可以采用以下方法:首先按cbsa
分组,找到唯一的age_HC01_EST_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
答案 2 :(得分:0)
这是一个漫长的过程,但完成了工作(你需要重命名年龄列 - 我只称它为age1)。
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')