要创建更全局的集合时,需要执行手动过程来合并表中的元素。这个想法是使用熊猫工具使其变得更容易和更自治。
让我们考虑下一个示例,在下一个表格中,您可以看到一些硕士和研究生在每个学期都表现出色的大学和学生的信息。如您所见,有一些“ nan”值。
1987-10-24
该想法是显示每个主表,因此您需要加入每个学期并创建一个单列,如下表所示。
1 Semester 2 Semester 3 Semester 4 Semester
Harvard Oliver nan Michael nan
MIT Noah Connor Callum George
Jack nan nan Oscar
Stanford Harry nan Kyle nan
Liam nan Reece nan
Georgia Jake Charlie nan nan
Jacob Damian nan nan
Mason Daniel nan nan
我尝试了许多选项,例如合并,联接和连接,但没有一个对我有用。
Master
Harvard Oliver
Michael
MIT Noah
Jack
Connor
Callum
George
Oscar
Stanford Harry
Liam
Kyle
Reece
Georgia Jake
Jacob
Mason
Charlie
Damian
Daniel
我的目标是加入第一个表的列(学期1,2,3,4)并创建一个单独的列,而不考虑“ nan”值
答案 0 :(得分:1)
将DataFrame.set_index
与DataFrame.stack
一起使用,并将Series.reset_index
用作新列:
df = pd.read_csv('/home/datasci/PEC/prog_datasci_4/data/university.csv')
cols = ['1 Semester','2 Semester', '3 Semester','4 Semester']
df1 = (df.set_index('university')[cols]
.stack()
.reset_index(level=1, drop=True)
.rename_axis('University')
.reset_index(name='Master'))
print (df1)
University Master
0 Harvard Oliver
1 Harvard Michael
2 MIT Noah
3 MIT Connor
4 MIT Callum
5 MIT George
6 MIT Jack
7 MIT Oscar
8 Stanford Harry
9 Stanford Kyle
10 Stanford Liam
11 Stanford Reece
12 Georgia Jake
13 Georgia Charlie
14 Georgia Jacob
15 Georgia Damian
16 Georgia Mason
17 Georgia Daniel
如果需要索引中的第一列:
cols = ['1 Semester','2 Semester', '3 Semester','4 Semester']
df2 = (df.set_index('university')[cols]
.stack()
.reset_index(level=1, drop=True)
.to_frame('Master'))
print (df2)
Master
university
Harvard Oliver
Harvard Michael
MIT Noah
MIT Connor
MIT Callum
MIT George
MIT Jack
MIT Oscar
Stanford Harry
Stanford Kyle
Stanford Liam
Stanford Reece
Georgia Jake
Georgia Charlie
Georgia Jacob
Georgia Damian
Georgia Mason
Georgia Daniel