Python中的数据透视图数据框-股市分析

时间:2020-08-14 17:17:57

标签: python pivot-table stock

我有python字典

stockDict = {
    'Owned' : ['CTSH', 'GOOGL'],
    'Wishlist' : ['LAZY', 'CTSH', 'AAPL']
}

:更新了字典以使其值具有不同的数组大小。 @Youness Sadaan的解决方案效果很好!

我想将其转换为如下所示的数据框:

    stockCode   Remarks
0   CTSH        Owned
1   GOOGL       Owned
2   LAZY        Wishlist
3   CTSH        Wishlist
3   AAPL        Wishlist

我首先将字典转换为数据框,然后使用数据透视表实现所需的功能。

stockDf = pd.DataFrame(columns = ["stockCode", "Remarks"])
df = pd.DataFrame([(k, *v) for k, v in stockDict.items()])
df.columns = ['Remarks'] + [f'stock{x}' for x in df.columns[1:]]
display(df)

在这一点上,我对如何实现所需的输出感到困惑。

pd.pivot_table(df, values=['stock1', 'stock2', 'stock3', 'stock4'], index=None, columns='Remarks', aggfunc='first')

提供以下信息:

Remarks Owned   Wishlist
stock1  CTSH    LAZY
stock2  GOOGL   AIRG
stock3  None    CLSK
stock4  None    CTSH

有人可以帮忙吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

您错过了熔化步骤。尝试以下代码,然后只需重命名您的列即可!

stockDict = {'Owned' : ['CTSH', 'GOOGL'],'Wishlist' : ['LAZY', 'AIRG', 'CLSK', 'CTSH']}
df = pd.DataFrame.from_dict(stockDict, orient = 'index')
df.T.melt()

答案 1 :(得分:0)

使用melt()函数会更好,更容易。

我编辑了您的代码以提供所需的相同输出:


stockDict = {'Owned' : ['CTSH', 'GOOGL'],'Wishlist' : ['LAZY', 'AIRG', 'CLSK', 'CTSH']}


stockDf = pd.DataFrame(columns = ["stockCode", "Remarks"])
df = pd.DataFrame([(k, *v) for k, v in stockDict.items()])
df.columns = ['Remarks'] + [f'stock{x}' for x in df.columns[1:]]


df3=df.melt(id_vars=['Remarks'], value_vars=['stock1', 'stock2','stock3','stock4'],value_name='stockCode')[['Remarks','stockCode']]

df3=df3.sort_values(by=['Remarks'])

display(df3)

输出:

    Remarks stockCode
0     Owned      CTSH
2     Owned     GOOGL
4     Owned      None
6     Owned      None
1  Wishlist      LAZY
3  Wishlist      AIRG
5  Wishlist      CLSK
7  Wishlist      CTSH