首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas :如何使用groupby函数连接或合并组,并填充单个表或数据帧?

Pandas :如何使用groupby函数连接或合并组,并填充单个表或数据帧?
EN

Stack Overflow用户
提问于 2020-04-08 00:18:23
回答 1查看 27关注 0票数 0
代码语言:javascript
复制
df =  name  description curve   tenor   rates
       IND     3M       ZAR_3M   0.25   6.808000088
       IND     2Y       ZAR_3M    2     6.483012199
       IND     3Y       ZAR_3M    3     6.565002918
       IND    4Y        ZAR_3M    4      6.694129944
       IND    5Y        ZAR_3M    5      6.83951807
       IND    3M        CAD_OIS   0.25   1.738620043
       BHU    6M        CAD_OIS   0.5   1.718042016
       IND    9M        CAD_OIS   0.75  1.697247028
       IND    1Y        CAD_OIS    1    1.67719996
       IND   18M        CAD_OIS   1.5   1.631257057
       IND    2Y        CAD_3M    2     1.906309009
       IND    3y        CAD_3M    3     1.855569959
       IND    4Y        CAD_3M    4     1.830132961
       BHU    5Y        CAD_3M    5     1.817605019
       BHU    6y        CAD_3M    6     1.814880013
       IND    7Y        CAD_3M    7     1.821526051
       BHU   TND        CZK_Curve 0.01  0.02
       BHU   1WK        CZK_Curve 0.03  0.0203
       BHU   1M         CZK_Curve 0.09  0.021
       BHU   2M         CZK_Curve 0.18  0.0212
       BHU   3M         CZK_Curve 0.26  0.0214
       BHU   6M         CZK_Curve 0.51  0.0212
       BHU   9M         CZK_Curve 0.76  0.02045
       BHU  12M         CZK_Curve 1.01  0.01985
       BHU  2Y          CZK_Curve 2.01  0.020033333
       BHU  3Y          CZK_Curve 3.02  0.018816667
       BHU  4Y          CZK_Curve 4.02  0.017666667
       BHU  5Y          CZK_Curve 5.02  0.016616667
       BHU  6Y          CZK_Curve 6.02  0.015766667
       BHU  7Y          CZK_Curve 7.02  0.015216667
       BHU  8Y          CZK_Curve 8.02  0.014616667
       BHU  9Y          CZK_Curve 9.02  0.014358333

上面是我的数据帧(Df),有5个变量。我想根据‘曲线’填充表格,并将费率重命名为曲线名称。以下是我的预期输出。我尝试使用groupby函数来生成组,并基于'tenor‘并排连接。但我的代码似乎不完整。请建议如何产生以下输出。

代码语言:javascript
复制
df_tenor = df_tenor[['Tenor']].drop_duplicates()
df_tenor = df_tenor.sort_values(by=['tenor'])
gb = df.groupby('curve')
df.rename(columns={'rates': str([df.curve.unique() for g in gb])}, inplace=True)
df_final= pd.concat([g[1].merge(df_tenor, how='outer', on='Tenor') for g in gb], axis=1)
df_final.to_csv('testconcat.csv', index = False)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-08 00:41:41

使用pandas.pivot_table()`

代码语言:javascript
复制
pd.pivot_table(df, index='tenor', values='rates', columns='curve')

输出

代码语言:javascript
复制
curve    CAD_3M   CAD_OIS  CZK_Curve    ZAR_3M
tenor
0.01        NaN       NaN   0.020000       NaN
0.03        NaN       NaN   0.020300       NaN
0.09        NaN       NaN   0.021000       NaN
0.18        NaN       NaN   0.021200       NaN
0.25        NaN  1.738620        NaN  6.808000
0.26        NaN       NaN   0.021400       NaN
0.50        NaN  1.718042        NaN       NaN
0.51        NaN       NaN   0.021200       NaN
0.75        NaN  1.697247        NaN       NaN
0.76        NaN       NaN   0.020450       NaN
1.00        NaN  1.677200        NaN       NaN
1.01        NaN       NaN   0.019850       NaN
1.50        NaN  1.631257        NaN       NaN
2.00   1.906309       NaN        NaN  6.483012
2.01        NaN       NaN   0.020033       NaN
3.00   1.855570       NaN        NaN  6.565003
3.02        NaN       NaN   0.018817       NaN
4.00   1.830133       NaN        NaN  6.694130
4.02        NaN       NaN   0.017667       NaN
5.00   1.817605       NaN        NaN  6.839518
5.02        NaN       NaN   0.016617       NaN
6.00   1.814880       NaN        NaN       NaN
6.02        NaN       NaN   0.015767       NaN
7.00   1.821526       NaN        NaN       NaN
7.02        NaN       NaN   0.015217       NaN
8.02        NaN       NaN   0.014617       NaN
9.02        NaN       NaN   0.014358       NaN
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61084602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档