2017-02-17 110 views
3

我嘗試添加不同長度的兩隻大熊貓dataframes在一起:結合兩隻大熊貓dataframes只需添加整數計數

fruit rating count 
0 apple  A  2 
1 pear  B  2 
2 peach  A  1 
3 apple  B  2 
4 pear  C  1 

    fruit rating count 
0 apple  A 0 
1 apple  B 0 
2 apple  C 0 
3 pear  A 0 
4 pear  B 0 
5 pear  C 0 
6 peach  A 0 
7 peach  B 0 
8 peach  C 0 

基本上我想第一dataframes'計數整數添加到它下面的第二個類型和評級是相同的。例如,由於「pear和B」,dataframe1上的索引1應該在dataframe2的索引4上添加2兩個計數。

我已經嘗試過更新功能,但它似乎與索引混亂,只是取代了類型和評級。如果我不擅長解釋,請道歉。我仍在學習。非常感謝你的幫助。

回答

0

假設你dataframes是DF1分別DF2,

df3 = pd.merge(df2, df1, how = 'outer', on = ['fruit', 'rating']) 
df3 = df3.drop('count_x', axis = 1).fillna(0) 
df3.columns = ['fruit', 'rating', 'count'] 

會給你想要的數據幀

fruit rating count 
0 apple A 2.0 
1 apple B 2.0 
2 apple C 0.0 
3 pear A 0.0 
4 pear B 2.0 
5 pear C 1.0 
6 peach A 1.0 
7 peach B 0.0 
8 peach C 0.0 
+0

非常感謝! –

2

您可以在相關的索引嘗試groupby

​​

這給你一個多重索引DataFrame

   count 
fruit rating  
apple A   2.0 
     B   2.0 
     C   0.0 
peach A   1.0 
     B   0.0 
     C   0.0 
pear A   0.0 
     B   2.0 
     C   1.0 

如果要刪除索引只是重置索引:

result.reset_index() 
Out[182]: 
    fruit rating count 
0 apple  A 2.0 
1 apple  B 2.0 
2 apple  C 0.0 
3 peach  A 1.0 
4 peach  B 0.0 
5 peach  C 0.0 
6 pear  A 0.0 
7 pear  B 2.0 
8 pear  C 1.0 
+0

沒有必要groupby。水果和評級似乎已經是獨一無二的了。使用設置索引 – piRSquared

+0

謝謝。我仍然在學習自己。實際上,這幫助我實現了我認爲'groupby'會爲我做的事情。 –

+0

非常感謝! –

0

這側重於更新只需要添加行和維護integerdtype

df1.append(df2).groupby(['fruit', 'rating']).sum().reset_index() 

    fruit rating count 
0 apple  A  2 
1 apple  B  2 
2 apple  C  0 
3 peach  A  1 
4 peach  B  0 
5 peach  C  0 
6 pear  A  0 
7 pear  B  2 
8 pear  C  1 
1

我發現SQL最直觀的用於這樣的目的:

import pandasql 
import pandas as pd 

pysqldf = lambda q: pandasql.sqldf(q, globals()) 

Table1 = pd.DataFrame() 
Table1['x'] = [x for x in range(10)] 
Table2 = pd.DataFrame() 
Table2['x'] = [x for x in range(10)] 

print pysqldf(''' 
SELECT 
    *, 
    1 as ID 
FROM Table1 
UNION 
    SELECT *,2 as ID 
    FROM Table2 
''')