Python 中的 Pivot Dataframe - 股票市场分析

Pivot Dataframe in Python - stock market analysis

我有 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

我从将字典转换为数据框开始,然后使用 pivot_table 来实现我需要的。

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

有人可以帮忙吗?

谢谢。

您错过了融化步骤。试试下面的代码,然后简单地重命名您的列!

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

使用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