数据透视表:每个单元格中显示两次值

2024-09-29 17:17:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法理解为什么数据框中的值在每个单元格中显示两次

最初,我将数据从MySQL下载到pandas dataframe,并将数字格式化为“每月性能”列中的百分比:

    data_frame = pd.read_sql(query, con=engine)
    data_frame['monthly_perf']=data_frame['monthly_perf'].astype(float).map('{:,.2%}'.format)

我觉得结果不错(以下部分数据):

start_date end_date   name  monthly_perf
1998-12-31 1999-01-31 TB3MS 0.36%
1999-01-31 1999-02-28 TB3MS 0.38%
1999-02-28 1999-03-31 TB3MS 0.37%
1999-03-31 1999-04-30 TB3MS 0.37%
1999-04-30 1999-05-31 TB3MS 0.38%
1999-05-31 1999-06-30 TB3MS 0.39%

稍后,我将使用data_frame创建数据透视表:

pivot_table = data_frame.pivot_table(values='monthly_perf', index=['end_date',], columns=['name'], aggfunc=np.sum, fill_value=0).reset_index()

结果很奇怪:

start_date end_date   TB3MS
1998-12-31 1999-01-31 0.36%0.36%
1999-01-31 1999-02-28 0.38%0.38%
1999-02-28 1999-03-31 0.37%0.37%
1999-03-31 1999-04-30 0.37%0.37%
1999-04-30 1999-05-31 0.38%0.38%
1999-05-31 1999-06-30 0.39%0.39%

由于某种原因,每个数字显示两次。为什么?当我将熊猫数据帧格式化为%时,是否将所有内容都转换为字符串格式

谢谢你的帮助


Tags: 数据namedatadateindexmysqltable数字
1条回答
网友
1楼 · 发布于 2024-09-29 17:17:55

问题是,若通过.map('{:,.2%}'.format将数字转换为字符串,然后使用sum将它们连接在一起

您可以尝试:

print ('0.36%' + '0.36%')
0.36%0.36%

因此,首先通过pivot_table数字数据进行处理,然后在最后一步添加%并将其转换为字符串

编辑:

data_frame = pd.read_sql(query, con=engine)

name_list = data_frame['name'].unique()
pivot_table = (data_frame.pivot_table(values='monthly_perf',
                                      index='end_date', 
                                      columns='name', 
                                      aggfunc=np.sum,
                                      fill_value=0).reset_index())
data_frame[fund_list]=data_frame[fund_list].astype('float').applymap('{:,.2%}'.format) 

但它应该像这样工作:

data_frame = pd.read_sql(query, con=engine)

pivot_table = (data_frame.pivot_table(values='monthly_perf',
                                      index='end_date', 
                                      columns='name', 
                                      aggfunc=np.sum,
                                      fill_value=0).reset_index())
data_frame = data_frame.astype('float').applymap('{:,.2%}'.format) 

相关问题 更多 >

    热门问题