如何将三重DataFrame转换为不重复行的新DataFrame?

如何将三重DataFrame转换为不重复行的新DataFrame?

问题描述:

我有一个名为DF1和DF2两只大熊猫DataFrames,其定义如下:如何将三重DataFrame转换为不重复行的新DataFrame?

>> df1 = pd.DataFrame({ 
'id':  ['A', 'A', 'A', 'B', 'B', 'C', 'C'], 
'year':  [2015, 2016, 2017, 2016, 2017, 2015, 2017], 
'amount': [1, 2, 3, 4, 5, 6, 7] }) 

>> df2 = pd.DataFrame({ 
    'id': ['A', 'B', 'C'], 
    '2015': [1, np.NaN, 6], 
    '2016': [2, 4, np.NaN], 
    '2017': [3, 5, 7] }) 

>> df1 
    amount id year 
0  1 A 2015 
1  2 A 2016 
2  3 A 2017 
3  4 B 2016 
4  5 B 2017 
5  6 C 2015 
6  7 C 2017 

>> df2 
    2015 2016 2017 id 
0 1.0 2.0  3 A 
1 NaN 4.0  5 B 
2 6.0 NaN  7 C 

正如你可以看到,这两个DataFrames包含相同的信息。 DataFrame df1是三元组,而df2是DataFrame,其字段ID中没有重复值。

我的问题是如何使用大熊猫DF1以有效的方式DF2转换(不for循环)? 那么df2到df1怎么样?

+3

你只需要'pivot'。 'df1.pivot('id','year','amount')' – Psidom

您可以转动DF1得到DF2这样的:

pd.pivot_table(df1, index='id', columns='year', values = 'amount') 


year 2015 2016 2017 
id   
A  1  2  3 
B  NaN  4  5 
C  6  NaN  7 

和熔体做反向

pd.melt(df2, id_vars=["id"],var_name="year", value_name="amount").dropna() 


    id year amount 
0 A 2015 1 
2 C 2015 6 
3 A 2016 2 
4 B 2016 4 
6 A 2017 3 
7 B 2017 5 
8 C 2017 7 
+0

好的解决方案!非常感谢你! – o0Helloworld0o