0

数据框 1

**指数 数学 分数**
1. 学生1 44
2. 学生2 35
3. 学生3 36

数据框 2

**指数 主题 分数**
1. 英语 50
2. 科学 37
1. 英语 36
2. 科学 44

所需数据框:

**指数 主题 分数**
1. 英语 50
2. 科学 37
3. 数学 44
1. 英语 36
2. 科学 44
3. 数学 35
1. 英语 47
2. 科学 30
3. 数学 36

需要将 Dataframe 1 合并到 Dataframe 2 中,每 3 行。

4

1 回答 1

0

长格式和宽格式之间存在混合。最好的办法是让所有表格都采用长格式。

math = pd.DataFrame(
    {
     'math': ['Student1', 'Student2', 'Student3'],
     'score': [44, 35, 36]
    }
)

other = pd.DataFrame(
    {
     'student_id': 2*['Student1', 'Student2', "Student3"],
     'subject': 3*['english', 'science'],
     'score': [50, 37, 36, 44, 47, 30]
    }
)

otherdf是

学生卡 主题 分数
0 学生1 英语 50
1 学生2 科学 37
2 学生3 英语 36
3 学生1 科学 44
4 学生2 英语 47
5 学生3 科学 30

mathdf 是

数学 分数
0 学生1 44
1 学生2 35
2 学生3 36

长格式

# for the long format
math['subject']="math"
math = math.rename(columns={'math': 'student_id'})
学生卡 分数 主题
0 学生1 44 数学
1 学生2 35 数学
2 学生3 36 数学
other.append(math).sort_values(['subject', 'student_id'])
学生卡 主题 分数
0 学生1 英语 50
4 学生2 英语 47
2 学生3 英语 36
0 学生1 数学 44
1 学生2 数学 35
2 学生3 数学 36
3 学生1 科学 44
1 学生2 科学 37
5 学生3 科学 30

宽幅面

# the key to merge dfs is student_id
math_wide = math.rename(columns={'math': 'student_id', 'score': 'math'})
math_wide
学生卡 数学
0 学生1 44
1 学生2 35
2 学生3 36
other_wide = other.pivot(index='student_id', columns="subject", values='score').reset_index()
other_wide = other_wide.rename_axis(None, axis=1).reset_index(drop=True)
all_subject = other_wide.merge(math_wide, on='student_id')
学生卡 英语 科学 数学
0 学生1 50 44 44
1 学生2 47 37 35
2 学生3 36 30 36
于 2021-05-19T09:29:34.297 回答