簡體   English   中英

對於 Pandas Dataframe 有沒有辦法在保留所有其他值的同時將同一類別顯示為一個類別?

[英]For Pandas Dataframe is there a way to display same category together as one while retaining all the other values?

對於 Pandas Dataframe 有沒有辦法將相同的類別一起顯示為一個類別,同時保留字符串中的所有其他值?

假設我有以下場景:

pd.DataFrame({"category": ['Associates', 'Manager', 'Associates', 'Associates', 'Engineer', 'Engineer', 'Manager', 'Engineer'],
              "name": ['Abby', 'Jenny', 'Thomas', 'John', 'Eve', 'Danny', 'Kenny', 'Helen'],
              "email": ['Abby@email.com', 'Jenny@email.com', 'Thomas@email.com', 'John@email.com', 'Eve@email.com', 'Danny@email.com', 'Kenny@email.com', 'Helen@email.com']})

如何嘗試以這種方式顯示 dataframe?

Output:

category     name     email
Associates   Abby     Abby@email.com
             Thomas   Thomas@email.com
             John     John@email.com
Manager      Jenny    Jenny@email.com
             Kenny    Kenny@email.com
Engineer     Eve      Eve@email.com
             Danny    Danny@email.com
             Helen    Helen@email.com

有什么建議,還是可以用 groupby 函數來完成? 謝謝!

我不太清楚你所說的display是什么意思。 要獲得與您展示的打印類似(不完全)的打印,您不需要.groupby() 做就是了

df = df.set_index(["category", "name"]).sort_index()

並得到

                              email
category   name                    
Associates Abby      Abby@email.com
           John      John@email.com
           Thomas  Thomas@email.com
Engineer   Danny    Danny@email.com
           Eve        Eve@email.com
           Helen    Helen@email.com
Manager    Jenny    Jenny@email.com
           Kenny    Kenny@email.com

如果您真的想修改列,那么您可以嘗試類似

df = df.sort_values(["category", "name"], ignore_index=True)
df.loc[df["category"] == df["category"].shift(), "category"] = ""

要得到

     category    name             email
0  Associates    Abby    Abby@email.com
1                John    John@email.com
2              Thomas  Thomas@email.com
3    Engineer   Danny   Danny@email.com
4                 Eve     Eve@email.com
5               Helen   Helen@email.com
6     Manager   Jenny   Jenny@email.com
7               Kenny   Kenny@email.com

為此,您將有兩行代碼:首先,您需要將categoryname都設置為索引

df.set_index(['category','name'],inplace=True)

接下來,您將使用groupby.sum來獲得所需的 output。

df.groupby(level=[0,1]).sum()
Out[67]: 
                              email
category   name                    
Associates Abby      Abby@email.com
           John      John@email.com
           Thomas  Thomas@email.com
Engineer   Danny    Danny@email.com
           Eve        Eve@email.com
           Helen    Helen@email.com
Manager    Jenny    Jenny@email.com
           Kenny    Kenny@email.com

為此,您可以使用groupby() function。 下面顯示的是示例代碼。

df.groupby(['category','name']).max()

現在數據為索引格式,並且與您提到的格式相同,如果要刪除索引,請使用以下代碼

df.groupby(['category','name']).max().reset_index()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM