繁体   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