将 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
如果您根本不关心帮助识别名称来源(它来自哪一列)的变量列,那么您可以简单地删除它。
您还可以自定义输出变量的名称(而不是 variable 和 value)。这是一个获得您想要的确切输出的示例:
df.melt(id_vars=['date', 'id'], value_vars= ['stu1', 'stu2'], value_name='stu').drop(['variable'], axis = 1)
查看原始文档pandas.melt了解更多信息!
我有一个看起来像这样的数据框:
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
如果您根本不关心帮助识别名称来源(它来自哪一列)的变量列,那么您可以简单地删除它。
您还可以自定义输出变量的名称(而不是 variable 和 value)。这是一个获得您想要的确切输出的示例:
df.melt(id_vars=['date', 'id'], value_vars= ['stu1', 'stu2'], value_name='stu').drop(['variable'], axis = 1)
查看原始文档pandas.melt了解更多信息!