python - Pandas groupby 根据条件创建新列
问题描述
在下表中,我想为由地址相关字段 X、Y、Z(Groupby XYZ)创建的组生成列新区域。如果在代码列中,如果值为A,则只计算该区域一次,并将剩余区域添加到其他代码中。
所以对于这个组,新的面积应该是100(A)+200(B)+300(C)= 600。注意不能取和,因为A重复了两次。只想将值 A 的一个区域计入总和,而不是全部
获取上表:
df['X'] = ['222 North St','222 North St','222 North St','222 North St','115 John St','115 John St','115 John St']
df['Y'] = ['Seattle','Seattle','Seattle','Seattle','Chicago','Chicago','Chicago']
df['Z'] = ['WA','WA','WA','WA','IL','IL','IL']
df['code'] = ['A','B','A','C','A','A','B']
df['area'] = [100,200,100,300,200,200,50]```
解决方案
所以这行得通,但不确定它是否是最有效的方法。由于您没有指定在有多个代码时要采用哪个area
代码,因此我假设它们将保留相同的值,因此删除了重复项。
import pandas as pd
df = pd.DataFrame()
df['X'] = ['222 North St','222 North St','222 North St','222 North St','115 John St','115 John St','115 John St']
df['Y'] = ['Seattle','Seattle','Seattle','Seattle','Chicago','Chicago','Chicago']
df['Z'] = ['WA','WA','WA','WA','IL','IL','IL']
df['code'] = ['A','B','A','C','A','A','B']
df['area'] = [100,200,100,300,200,200,50]
df2 = df.drop_duplicates(subset=['X','Y','Z','code']).groupby(['X','Y','Z']).agg({'area':'sum'}).reset_index()
df = pd.merge(df,df2,how='left',on=['X','Y','Z']).rename(columns={'area_x':'area','area_y':'area sum'})
此外,如果您能够自己提供上述代码的第一部分,您将吸引更多人尝试回答您的问题。
编辑:
# drop duplicates but only for code = A
df_A = df[df['code']=='A'].drop_duplicates(subset=['X','Y','Z','code'])
# groupby and sum now that A only appears once - this creates the 'area sum'
df2 = pd.concat([df[df['code']!='A'],df_A]).groupby(['X','Y','Z']).agg({'area':'sum'}).reset_index()
# merge onto original dataframe
df = pd.merge(df,df2,how='left',on=['X','Y','Z']).rename(columns={'area_x':'area','area_y':'area sum'})
推荐阅读
- r - 在数据框中每第四列插入 8 个空 (NA) 列
- java - 将相同的数据添加到多个折线图
- django - 无法删除对象 - ?csrfmiddlewaretoken= 出现在 urlbar (django) 中当前 URL 的末尾
- sql - 列“column1”的类型与 UNPIVOT 列表中指定的其他列的类型冲突
- pandas - 如果列值存在于另一个数据框中,则从数据框中提取数据
- swift - 在 Swift [UI] 中使用 UserDefaults 变得疯狂
- android - Android - 从通知启动活动
- audio - 从电影中删除一个音轨会在复制时导致音频不同步,但在重新编码时不会 - 为什么?
- regex - 为什么这个正则表达式匹配这个字符串?
- ms-word - 如何在 Word 文档中设置药丸样式?