根据条件融化多列熊猫数据框

josh453

我有一个熊猫数据框,如下所示:

dataframe = pd.DataFrame(
    {
    'ID': [1,2,3,4],
    'Gender': ['F','F','M','M'],
    'Language': ['EN', 'ES', 'EN', 'EN'],
    'Year 1': [2020,2020,2020,2020],
    'Score 1': [93,97,83,86],
    'Year 2': [2020,2020,None,2018],
    'Score 2': [85,95,None,55],
    'Year 3': [2020,2018,None,None],
    'Score 3': [87,86,None,None]
    }
)
ID 性别 语言 1年级 得分1 2年级 得分2 3年级 得分3
1个 F 2020年 93 2020年 85 2020年 87
2 F 它是 2020年 97 2020年 95 2018年 86
3 中号 2020年 83
4 中号 2020年 86 2018年 55

我想根据年份和相应的分数来融化,例如,如果任何年份等于2020,那么将生成以下内容:

ID 性别 语言 得分
1个 F 2020年 93
1个 F 2020年 85
1个 F 2020年 87
2 F 它是 2020年 97
2 F 它是 2020年 95
3 中号 2020年 83
4 中号 2020年 86

我尝试使用,pd.melt但在按年份跨列过滤并保持相应条目时遇到麻烦。

ky

据我了解,您可以尝试:

out = (pd.wide_to_long(dataframe,['Year','Score'],['ID','Gender','Language'],'v',' ')
                                               .dropna().droplevel(-1).reset_index())

print(out)

   ID Gender Language    Year  Score
0   1      F       EN  2020.0   93.0
1   1      F       EN  2020.0   85.0
2   1      F       EN  2020.0   87.0
3   2      F       ES  2020.0   97.0
4   2      F       ES  2020.0   95.0
5   2      F       ES  2018.0   86.0
6   3      M       EN  2020.0   83.0
7   4      M       EN  2020.0   86.0
8   4      M       EN  2018.0   55.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章