【问题标题】:Grouping data on unique column keys and joining (pivot table) in Pandas Python在 Pandas Python 中对唯一列键的数据进行分组并加入(数据透视表)
【发布时间】:2015-10-01 06:59:48
【问题描述】:

我是 pandas 和 python 的新手,我正在尝试重塑 .csv 中提供的数据。数据的结构使得具有各自收盘价和日期的代码在同一列中是连续的。

例如:

               TIC     CLOSE
DATE                        
1984-01-03   0223B  25.37500
1984-01-04   0223B  25.75000
1984-01-05   0223B  25.75000
1983-12-30   0485B  21.37500
1984-01-03   0485B  21.37500
1984-01-04   0485B  22.50000
1983-12-30   0491B  17.75000
1984-01-03   0491B  17.50000
1984-01-04   0491B  17.62500
1983-12-30   3614B  74.25000
1984-01-03   3614B  73.25000
1984-01-04   3614B  76.00000
1993-07-01   3615B  47.25000
1993-07-02   3615B  47.25000
1993-07-06   3615B  46.40625
1983-12-30  3ABNKQ   4.75000
1984-01-03  3ABNKQ   5.00000
1984-01-04  3ABNKQ   5.62500
1983-12-30   3ACKH  55.25000
1984-01-03   3ACKH  54.50000
1984-01-04   3ACKH  55.25000 

我想重塑数据,以便我将拥有一个 pandas 数据框,其中每列将是一个带有各自关闭的股票代码,如果日期行键没有数据,它将具有 NaN(“左”连接) .

我尝试过这样的事情:

sp = pd.read_csv('D:\Stocks.csv')
sp = pd.DataFrame(sp)
sp.columns = ['TIC', 'DATE', 'CLOSE']
sp.index = pd.to_datetime(sp['DATE'])
sp = sp[['TIC', 'CLOSE']]
unique_tickers = sp['TIC'].unique()

s0 = sp[sp['TIC'] == unique_tickers[0]]
s0 = pd.DataFrame(s0['CLOSE'])
s1 = sp[sp['TIC'] == unique_tickers[1]]
s1 = pd.DataFrame(s1['CLOSE'])

s0s1 = pd.concat([s0, s1], axis = 1)
s0s1.columns = unique_tickers[0:2]

for i in range(len(unique_tickers)):
    sx = sp[sp['TIC'] == unique_tickers[i]]
    sx = pd.DataFrame(sx['CLOSE'])
    s0s1 = pd.concat([s0s1, sx], axis = 1)

我想我可以破解上面的代码来让它工作,但我认为有一个更优雅的解决方案。有什么想法吗?

谢谢!

我得到了原始问题的解决方案(感谢 BrenBarn):

sp = sp.reset_index().pivot(index='DATE', columns="TIC", values="CLOSE")

但是当我在更大的 .csv 上运行它时,我遇到了以下错误,

ValueError:索引包含重复条目,无法重塑

我试图通过尝试 sp.groupby('TIC') 然后获取所有唯一的 'Date' 行键来找到解决方案,但它可以找出语法。再次感谢任何帮助!

【问题讨论】:

    标签: python pandas time-series dataframe financial


    【解决方案1】:

    这是你想要的吗?

    >>> d.reset_index().pivot(index='DATE', columns="TIC", values="CLOSE")
    TIC          0223B   0485B   0491B  3614B     3615B  3ABNKQ  3ACKH
    DATE                                                              
    1983-12-30     NaN  21.375  17.750  74.25       NaN   4.750  55.25
    1984-01-03  25.375  21.375  17.500  73.25       NaN   5.000  54.50
    1984-01-04  25.750  22.500  17.625  76.00       NaN   5.625  55.25
    1984-01-05  25.750     NaN     NaN    NaN       NaN     NaN    NaN
    1993-07-01     NaN     NaN     NaN    NaN  47.25000     NaN    NaN
    1993-07-02     NaN     NaN     NaN    NaN  47.25000     NaN    NaN
    1993-07-06     NaN     NaN     NaN    NaN  46.40625     NaN    NaN
    

    我不得不使用reset_index,因为pivot 需要一个列作为索引(至少在this bug 修复之前)。

    【讨论】:

    • 完美,就是这样..我认为它必须是枢轴,但无法开始工作..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多