[英]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
如果您根本不關心有助於識別名稱來源(來自哪個列)的列變量,那么您可以簡單地刪除它。
您還可以自定義輸出變量的名稱(而不是variable和value )。 這是一個獲得您想要的確切輸出的示例:
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.