2017-02-17 10 views
3

を追加することで2つのパンダのデータフレームを組み合わせる:ちょうど私が一緒に長さの異なる2匹のパンダのデータフレームを追加しようとしています、整数カウント

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 

基本的に私はそれ以下の二番目に最初のデータフレームカウント整数を追加しますタイプとレーティングは同じです。たとえば、dataframe1のインデックス1は、「梨とB」のためにdataframe2のインデックス4に2を2つ追加する必要があります。

私は更新機能を試しましたが、インデックスを混乱させるようで、タイプと評価を置き換えます。私が説明に堪能でない場合は謝罪してください。私はまだ学んでいます。助けてくれてありがとう。あなたのデータフレームを想定し

答えて

0

はそれぞれ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'] 

あなたは、関連するインデックスにgroupbyを試すことができ、あなたに必要なデータフレーム

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

を与える:

​​

このあなたにマルチインデックスを与えます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

グループバイの必要はありません。果物と評価は既にユニークであるようです。セットインデックス – 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 
''') 
関連する問題