将 Pandas 数据框中新行的两列合并为单列

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

我有一个看起来像这样的数据框:

id stu1 stu2
11 James Rob
22 Bob Tom
33 Ryan Ian
44 Oliver Saj
55 Burt Ben
66 Chris Rich

为了将 stu1 和 stu2 合并到一个列中,每个名称在一个新行中(并为每个名称复制 id),我使用了这个:

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

给出了这个结果:

id stu
11 James
11 Rob
22 Bob
22 Tom
33 Ryan
33 Ian
44 Oliver
44 Saj
55 Burt
55 Ben
66 Chris
66 Rich

原始数据框已更新为包含日期,如下所示:

date id stu1 stu2
03/06/2022 11 James Rob
03/06/2022 22 Bob Tom
03/06/2022 33 Ryan Ian
03/06/2022 44 Oliver Saj
03/06/2022 55 Burt Ben
03/06/2022 66 Chris Rich

我想以相同的方式合并 stu1 和 stu2(复制每个名称的日期和 ID),但无法正常工作。

期望的结果是这样的:

date id stu
03/06/2022 11 James
03/06/2022 11 Rob
03/06/2022 22 Bob
03/06/2022 22 Tom
03/06/2022 33 Ryan
03/06/2022 33 Ian
03/06/2022 44 Oliver
03/06/2022 44 Saj
03/06/2022 55 Burt
03/06/2022 55 Ben
03/06/2022 66 Chris
03/06/2022 66 Rich

我是 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了解更多信息!