jos*_*453 4 python dataframe pandas
我有一个 pandas 数据框,如下所示:
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]
}
)
Run Code Online (Sandbox Code Playgroud)
| ID | 性别 | 语言 | 第一年 | 得分 1 | 第二年 | 得分 2 | 第三年 | 得分 3 |
|---|---|---|---|---|---|---|---|---|
| 1 | F | CN | 2020年 | 93 | 2020年 | 85 | 2020年 | 87 |
| 2 | F | ES | 2020年 | 97 | 2020年 | 95 | 2018年 | 86 |
| 3 | 中号 | CN | 2020年 | 83 | ||||
| 4 | 中号 | CN | 2020年 | 86 | 2018年 | 55 |
我想根据年份和相应的分数进行融化,例如,如果任何年份等于 2020,那么将生成以下内容:
| ID | 性别 | 语言 | 年 | 分数 |
|---|---|---|---|---|
| 1 | F | CN | 2020年 | 93 |
| 1 | F | CN | 2020年 | 85 |
| 1 | F | CN | 2020年 | 87 |
| 2 | F | ES | 2020年 | 97 |
| 2 | F | ES | 2020年 | 95 |
| 3 | 中号 | CN | 2020年 | 83 |
| 4 | 中号 | CN | 2020年 | 86 |
我尝试过使用pd.melt,但无法按年份跨列进行过滤并保留相应的条目。
据我了解,你可以尝试:
out = (pd.wide_to_long(dataframe,['Year','Score'],['ID','Gender','Language'],'v',' ')
.dropna().droplevel(-1).reset_index())
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
326 次 |
| 最近记录: |