以下面的输入为例,我试图根据其他实例的唯一实例在Python的数据框中创建一个聚合列。我可以尽力而为,但在新列中留下了NaN
raw_data = {'RegionCode' : ['10001', '10001', '10001', '10001', '10001', '10001', '10002', '10002', '10002', '10002', '10002', '10002'],
'Stratum' : ['1', '1','2','2','3', '3', '1', '1', '2', '2', '3', '3'],
'LaStratum' : ['1021', '1021', '1022', '1022', '1023', '1023', '2021', '2021', '2022', '2022', '2023', '2023'],
'StratumPop' : [125, 125, 50, 50, 100, 100, 250, 250, 200, 200, 300, 300],
'Q_response' : [2, 1, 4, 1, 2, 2, 3, 4, 3, 2, 1, 4]}
Data = pd.DataFrame(raw_data, columns = ['RegionCode', 'Stratum', 'LaStratum', 'StratumPop', 'Q_response'])
#Sum StratumPop by unique instance of LaStratum at RegionCode level
Data['Total_Pop'] = Data.drop_duplicates(['LaStratum']).groupby('RegionCode')['StratumPop'].transform('sum')
Data
我想做的是按LaStratum的每个唯一实例对RegionCode级别的StratumPop列求和。产生的总数是正确的,但是我如何“填充”该列以重复每个总数,而不仅仅是看到每个不同总数的第一个出现以及其他元素的NaN呢?因此,区域10001每行有275个,区域10002每行有750个。如果不创建临时表并合并回唯一值(如我目前正在执行的操作),是否可以做到这一点?
要填充该列并按区域重复每个Total_Pop,您可以使用一个简单的分组(按区域本身)ffill()
:
Data['Total_Pop_new'] = Data.groupby('RegionCode')['Total_Pop'].ffill()
会给你回来的:
Data
RegionCode Stratum LaStratum ... Q_response Total_Pop Total_Pop_new
0 10001 1 1021 ... 2 275.0 275.0
1 10001 1 1021 ... 1 NaN 275.0
2 10001 2 1022 ... 4 275.0 275.0
3 10001 2 1022 ... 1 NaN 275.0
4 10001 3 1023 ... 2 275.0 275.0
5 10001 3 1023 ... 2 NaN 275.0
6 10002 1 2021 ... 3 750.0 750.0
7 10002 1 2021 ... 4 NaN 750.0
8 10002 2 2022 ... 3 750.0 750.0
9 10002 2 2022 ... 2 NaN 750.0
10 10002 3 2023 ... 1 750.0 750.0
11 10002 3 2023 ... 4 NaN 750.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句