我有一个包含未聚合数据的数据框,如下所示:
df[['UniqueID ', 'SrvDesc']]
UniqueID SrvDesc
0 HEF104 Cash
1 HEF104 Credit
2 HEF104 Deposit
3 HEF104 Ticket
4 HEF104 Electronic
5 HEF197 Check
6 HEF197 Credit
7 HEF198 Credit
8 HEF198 Electronic
9 HEF198 Check
10 rows × 2 columns
如您所见,与每个唯一ID对应,SrvDesc有任意数量的唯一值(HEF104有5个唯一SrvDesc值,HEF198有3个,依此类推)。
我想做的是执行一些操作,该操作使我可以在UniqueID上聚合,以便每个UniqueID有一行,然后有任意数量的填充列,其中包含该给定UniqueID的SrvDesc的每个值:
UniqueID SrvDesc_1 SrvDesc_2 SrvDesc_3 SrvDesc_4 SrvDesc_5
0 HEF104 Cash Credit Deposit Ticket Electronic
1 HEF197 Check Credit
2 HEF198 Credit Electronic Check
我一直在研究pivot
和unstack
,它们似乎非常有用,但是我不确定它们是否可以使我完全完成我在这里试图做的事情。 / p>
谢谢!
答案 0 :(得分:1)
使用:
struct ContentView: View {
var body: some View {
NavigationView {
Text("")
.navigationBarTitle("Türkiye", displayMode: .inline)
.background(NavigationBarBuilder {navigationController in
navigationController.navigationBar.barTintColor = .red
navigationController.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
})
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
df2['count']=df2.groupby('UniqueID').cumcount()+1
df2['count']='SrvDesc_'+df2['count'].astype('str')
new_df=df2.set_index(['UniqueID','count']).unstack('count')['SrvDesc'].reset_index()
print(new_df)
如果要删除列名:
count UniqueID SrvDesc_1 SrvDesc_2 SrvDesc_3 SrvDesc_4 SrvDesc_5
0 HEF104 Cash Credit Deposit Ticket Electronic
1 HEF197 Check Credit NaN NaN NaN
2 HEF198 Credit Electronic Check NaN NaN
如果需要fillna,可以在unstack
方法中为fill_value字段指定一些值。
new_df.columns.name=None
print(new_df)
UniqueID SrvDesc_1 SrvDesc_2 SrvDesc_3 SrvDesc_4 SrvDesc_5
0 HEF104 Cash Credit Deposit Ticket Electronic
1 HEF197 Check Credit NaN NaN NaN
2 HEF198 Credit Electronic Check NaN NaN
df2['count']=df2.groupby('UniqueID').cumcount()+1
df2['count']='SrvDesc_'+df2['count'].astype('str')
new_df=df2.set_index(['UniqueID','count']).unstack('count',fill_value='')['SrvDesc'].reset_index()
new_df.columns.name=None
print(new_df)