我有带列的DataFrame(句点,spn,cpt,付款人)。我只能将2期的column(payer)值连接起来(仅滚动两个月)。 DF样本:
period spn cpt payer
7/1/2018 a 23 UNITED, HEALTH
7/1/2018 a 24 CARE, MEDI
7/1/2018 b 23 ASSIGN
8/1/2018 a 23 ASSIGN
8/1/2018 a 24 CARE, MEDI
8/1/2018 b 23 ASSIGN, MEDI
9/1/2018 a 23 ASSIGN
9/1/2018 a 24 MEDI
9/1/2018 b 23 ASSIGN, MEDI
我尝试过:
df.groupby(['spn', 'cpt'])['payer'].transform(lambda x: x.rolling(2, min_periods = 1).apply(', '.join, raw=False))
我收到一个错误:无法处理此类型->对象。
因此,将column(payer)转换为字符串类型,并尝试使用与上述相同的代码。但是我遇到了同样的错误。请帮我解决这个问题。
预期成绩
period spn cpt payer payer_concate
7/1/2018 a 23 UNITED, HEALTH UNITED, HEALTH, ASSIGN
7/1/2018 a 24 CARE, MEDI CARE, MEDI, CARE, MEDI
7/1/2018 b 23 ASSIGN ASSIGN, ASSIGN, MEDI
8/1/2018 a 23 ASSIGN ASSIGN, ASSIGN
8/1/2018 a 24 CARE, MEDI CARE, MEDI, MEDI
8/1/2018 b 23 ASSIGN, MEDI ASSIGN, MEDI, ASSIGN, MEDI
9/1/2018 a 23 ASSIGN ASSIGN
9/1/2018 a 24 MEDI MEDI
9/1/2018 b 23 ASSIGN, MEDI ASSIGN, MEDI
提前致谢
最佳答案
首先按句点对值进行排序。然后使用groupby并转换并连接相邻的付款人。由于最后一个期间没有关注者,因此该值将为None
,因此它们将由combine_first
填充为df
的原始值。
s = df.sort_values('period').groupby(['spn','cpt']).payer\
.transform(lambda x: x +',' + x.shift(-1)).combine_first(df.payer)
df["payer_concatenate"] = s
结果
period spn cpt payer payer_concatenate
0 7/1/2018 a 23 UNITED,HEALTH UNITED,HEALTH,ASSIGN
1 7/1/2018 a 24 CARE,MEDI CARE,MEDI,CARE,MEDI
2 7/1/2018 b 23 ASSIGN ASSIGN,ASSIGN,MEDI
3 8/1/2018 a 23 ASSIGN ASSIGN,ASSIGN
4 8/1/2018 a 24 CARE,MEDI CARE,MEDI,MEDI
5 8/1/2018 b 23 ASSIGN,MEDI ASSIGN,MEDI,ASSIGN,MEDI
6 9/1/2018 a 23 ASSIGN ASSIGN
7 9/1/2018 a 24 MEDI MEDI
8 9/1/2018 b 23 ASSIGN,MEDI ASSIGN,MEDI
关于python - 在两列上进行Groupby,然后使用pandas在特定列上应用transform(Partition),滚动和串联-Python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57006983/