熊猫 - 连接两个多指数dataframes
我有一个数据帧如下:熊猫 - 连接两个多指数dataframes
df.head()
Student Name Q1 Q2 Q3
Month Roll No
2016-08-01 0 Save Mithil Vinay 0.0 0.0 0.0
1 Abraham Ancy Chandy 6.0 5.0 5.0
2 Barabde Pranjal Sanjiv 7.0 5.0 5.0
3 Bari Siddhesh Kishor 8.0 5.0 3.0
4 Barretto Cleon Domnic 1.0 5.0 4.0
现在,我想作一个分层列的索引,所以我做了以下的方法:
big_df = pd.concat([df['Student Name'], df[['Q1', 'Q2', 'Q3']]], axis=1, keys=['Name', 'IS'])
,并能够得到如下:
>>> big_df
Name IS
Student Name Q1 Q2 Q3
Month Roll No
2016-08-01 0 Save Mithil Vinay 0.0 0.0 0.0
1 Abraham Ancy Chandy 6.0 5.0 5.0
2 Barabde Pranjal Sanjiv 7.0 5.0 5.0
3 Bari Siddhesh Kishor 8.0 5.0 3.0
4 Barretto Cleon Domnic 1.0 5.0 4.0
现在的第二次迭代,我只想来串联Q1, Q2, Q3
从新数据帧到big_df
数据帧的值(以前连接的数据帧)。现在的第二次迭代数据框如下:
Student Name Q1 Q2 Q3
Month Roll No
2016-08-01 0 Save Mithil Vinay 0.0 0.0 0.0
1 Abraham Ancy Chandy 8.0 5.0 5.0
2 Barabde Pranjal Sanjiv 7.0 5.0 4.0
3 Bari Siddhesh Kishor 8.0 4.0 3.0
4 Barretto Cleon Domnic 2.0 3.0 4.0
我想要的big_df
类似如下:
Name IS CC
Student Name Q1 Q2 Q3 Q1 Q2 Q3
Month Roll No
2016-08-01 0 Save Mithil Vinay 0.0 0.0 0.0 0.0 0.0 0.0
1 Abraham Ancy Chandy 6.0 5.0 5.0 8.0 5.0 5.0
2 Barabde Pranjal Sanjiv 7.0 5.0 5.0 7.0 5.0 4.0
3 Bari Siddhesh Kishor 8.0 5.0 3.0 8.0 4.0 3.0
4 Barretto Cleon Domnic 1.0 5.0 4.0 2.0 3.0 4.0
我尝试了以下代码,但都给人错误:
big_df.concat([df[['Q1', 'Q2', 'Q3']]], axis=1, keys=['CC'])
pd.concat([big_df, df[['Q1', 'Q2', 'Q3']]], axis=1, keys=['Name', 'CC'])
我在哪里做错误?请帮助。我是新来的大熊猫
首先,您最好将您的索引设置为['Month', 'Roll no.', 'Student Name']
。这将简化您的concat语法,并确保您也可以匹配学生的姓名。
df.set_index('Student Name', append=True, inplace=True)
其次,我建议你做不同的看法,并与参考的名称为最高列级你的迭代过程中存储您的df
dataframes(与Q1/Q2/Q3值)(例如:“IS” ,'CC')。一个字典将是完美的这一点,大熊猫确实接受字典作为参数传递给pd.concat
# Creating a dictionnary with the first df from your question
df_dict = {'IS': df}
# Iterate....
# Append the new df to the df_dict
df_dict['CC'] = df
现在,循环通过后,这里是你的字典:
df_dict
In [10]: df_dict
Out[10]:
{'CC': Q1 Q2 Q3
Month Roll No Student Name
2016-08-01 0 Save Mithil Vinay 0.0 0.0 0.0
1 Abraham Ancy Chandy 6.0 5.0 5.0
2 Barabde Pranjal Sanjiv 7.0 5.0 5.0
3 Bari Siddhesh Kisho 8.0 5.0 3.0
4 Barretto Cleon Domnic 1.0 5.0 4.0,
'IS': Q1 Q2 Q3
Month Roll No Student Name
2016-08-01 0 Save Mithil Vinay 0.0 0.0 0.0
1 Abraham Ancy Chandy 8.0 5.0 5.0
2 Barabde Pranjal Sanjiv 7.0 5.0 4.0
3 Bari Siddhesh Kisho 8.0 4.0 3.0
4 Barretto Cleon Domnic 2.0 3.0 4.0}
所以,现在如果你Concat的,熊猫的确好听,而且自动为您:
In [11]: big_df = pd.concat(df_dict, axis=1)
big_df
Out[11]:
如果你真的想反复做,你应该CONCAT之前预先考虑您的新多(“CC”)与big_df
df.columns = pd.MultiIndex.from_tuples([('IS', x) for x in df.columns])
# Then you can concat, give the same result as the picture above.
pd.concat([big_df, df], axis=1)
下降big_df
*别:
big_df.columns = big_df.columns.droplevel(level=0)
将它们连接起来,提供三种不同的帧作为输入匹配键的数量要使用:
Q_cols = ['Q1', 'Q2', 'Q3']
key_names = ['Name', 'IS', 'CC']
pd.concat([big_df[['Student Name']], big_df[Q_cols], df[Q_cols]], axis=1, keys=key_names)
非常感谢。我需要放弃'0级'。这是造成这个问题。 – Jeril
如果当你提出问题这将是真棒,你的东西在那里格式化你的问题可以简单地复制并使用pd.read_clipboard()来获取初始数据。您应该测试它的工作原理,并且还会突出显示read_clipboard()或几个后期处理行中需要哪些参数以准确获取您的数据框。这将使任何人都可以更容易地提供帮助。 –
@JulienMarrec很抱歉,下次会改进它。感谢支持 – Jeril