python - 通过添加新列的条件总和值
问题描述
通过一些代码,我已经想到了对原始数据库的这种减少。列STA_SID
可以有不同的值,有些可以重复。列CC_SI
只能有三个值ESS
-VSS
或Ostali nameni
。
我想做的最后一件事是:添加一个新列,其中对于 中的每个唯一值,对于三个可能值中的每一个STA_SID
,逐sum
列中的值,对于一个,其中值占整个值的 50%以上, 分配那个.Au
CC_SI
Au
STA_SID
CC_SI
STA_SID CC_SI Au
0 10001082 Ostali nameni 226.9
1 10001082 VSS 164.9
2 10001087 Ostali nameni 13.5
3 10001089 Ostali nameni 48.6
4 10001092 Ostali nameni 49.5
5 10001093 ESS 151.9
6 10001094 Ostali nameni 8.0
7 10001098 Ostali nameni 18.0
8 10001112 Ostali nameni 61.0
9 10001113 Ostali nameni 49.5
10 10001115 ESS 89.1
11 10001116 ESS 78.0
12 10001117 ESS 103.0
13 10001118 ESS 70.0
14 10001121 ESS 102.2
例子:
CC_SI
= 10001082
总和Au
= 226,9 + 164,9 = 391,8
Au
等于391,8Ostali nameni
的50% 以上。STA_SID = 10001082
226,9
最终的 df 看起来像这样STA_SID = 10001082
STA_SID CC_SI Au NewColumn
0 10001082 Ostali nameni 226.9 Ostali nameni
1 10001082 VSS 164.9 Ostali nameni
我试图用一行来快速写这个,lambda
但我无法对其他行的值求和。有人可以帮忙吗?
解决方案
您应该能够以这种方式找到它,通过获取每个记录与其组相比的 Au 比例,确定哪个记录将确定其组的 CC_SI,然后将该值应用回每个组。
df['Au_Proportion'] = df['Au']/df['Au'].groupby(df["STA_SID"]).transform('sum')
df['Majority'] = df['Au_Proportion'].apply(lambda x: 1 if x >.5 else 0)
df['Group_CC_SI'] = df.apply(lambda x: df['CC_SI'].loc[(df['Majority']==1)&(df['STA_SID']==x['STA_SID'])].values[0],axis=1)
推荐阅读
- iis - IIS 8.5 .NET Framework 4,应用程序无法加载并出现灾难性错误
- r - 不带 NA 的 R 平均值
- ionic-framework - 如何根据从 Ionic 中的 API 获取的详细信息应用超链接
- javascript - Reload component data based on vuex state
- angular - 如何从具有相同功能名称的多个按钮中仅触发当前按钮 - Angular 6
- websphere - 无法打开资源的输入流
- jasmine - 如何在量角器报告中报告自定义消息?
- c - 虽然 gcc 需要 -lm 用于 math.h 但不需要 -l 用于包括 stdio.h、stdlib.h 等
- awk - 在字符串后打印单词
- postgresql - 按间隔时间分组 - PostgreSQL