簡體   English   中英

在 Pandas Dataframe 中的新行上將兩列合並為一列

[英]Combing Two Columns into Single Column on New Rows in Pandas Dataframe

我有一個看起來像這樣的數據框:

ID stu1 stu2
11 詹姆士
22 鮑勃 湯姆
33 瑞安 伊恩
44 奧利弗 薩伊
55 伯特
66 克里斯 富有的

要將 stu1 和 stu2 組合成一個列,每個名稱都在一個新行上(並為每個名稱復制 id),我使用了這個:

stu_df = stu_df.set_index('id').stack().reset_index(level=1, drop=True).to_frame('stu').reset_index()

這給出了這個結果:

ID 斯圖
11 詹姆士
11
22 鮑勃
22 湯姆
33 瑞安
33 伊恩
44 奧利弗
44 薩伊
55 伯特
55
66 克里斯
66 富有的

原始數據框已更新為包含日期,如下所示:

日期 ID stu1 stu2
2022 年 3 月 6 日 11 詹姆士
2022 年 3 月 6 日 22 鮑勃 湯姆
2022 年 3 月 6 日 33 瑞安 伊恩
2022 年 3 月 6 日 44 奧利弗 薩伊
2022 年 3 月 6 日 55 伯特
2022 年 3 月 6 日 66 克里斯 富有的

我想以相同的方式組合 stu1 和 stu2 (復制每個名稱的日期和 id)但無法使其工作。

期望的結果是這樣的:

日期 ID 斯圖
2022 年 3 月 6 日 11 詹姆士
2022 年 3 月 6 日 11
2022 年 3 月 6 日 22 鮑勃
2022 年 3 月 6 日 22 湯姆
2022 年 3 月 6 日 33 瑞安
2022 年 3 月 6 日 33 伊恩
2022 年 3 月 6 日 44 奧利弗
2022 年 3 月 6 日 44 薩伊
2022 年 3 月 6 日 55 伯特
2022 年 3 月 6 日 55
2022 年 3 月 6 日 66 克里斯
2022 年 3 月 6 日 66 富有的

我是 Pandas 的新手,正在苦苦掙扎。 任何人都可以幫忙嗎? 謝謝

我建議使用 panda 的 melt 功能,如下所示:

import pandas as pd

# a sample of your dataframe
df = pd.DataFrame({
    'date' : ['03/06/2022', '03/06/2022', '03/06/2022'],
    'id' : [11,22,33], 
    'stu1' : ['James', 'Bob', 'Ryan' ], 
    'stu2' : ['James', 'Rob', 'Tom' ]})

# melt the dataframe
df_melted = df.melt(id_vars=['date', 'id'], value_vars= ['stu1', 'stu2'])

print(df_melted)

>>>
       date     id  variable    value
0   03/06/2022  11  stu1        James
1   03/06/2022  22  stu1         Bob
2   03/06/2022  33  stu1         Ryan
3   03/06/2022  11  stu2        James
4   03/06/2022  22  stu2         Rob
5   03/06/2022  33  stu2         Tom

如果您根本不關心有助於識別名稱來源(來自哪個列)的列變量,那么您可以簡單地刪除它。

您還可以自定義輸出變量的名稱(而不是variablevalue )。 這是一個獲得您想要的確切輸出的示例:

df.melt(id_vars=['date', 'id'], value_vars= ['stu1', 'stu2'], value_name='stu').drop(['variable'], axis = 1)

查看原始文檔pandas.melt了解更多信息!

暫無
暫無

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

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