2017-03-16 92 views
1

我有一個名爲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

回答

1

您可以轉動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

相關問題