2015-09-07 55 views
6

katılmak ve böyle her birinci dataframe satırla her saniye dataframe satır birleştirmek istiyorum:Pandalar dataframe Kartezyen İki pandalar dataframes var

İlk:

val1 val2 
1 2 
0 0 
2 1 

İkincisi:

l1 l2 
a a 
b c 

Sonuç (beklenen sonuç boyutu = len (ilk) *) ikinci (len):

val1 val2 l1 l2 
1 2 a a 
1 2 b c 
0 0 a a 
0 0 b c 
2 1 a a 
2 1 b b 

Aynı dizine sahip değiller.

Selamlar, Secau

cevap

5

... Bir kartezyen aralarında katılmak yapmak için bir vekil anahtar oluşturun

import pandas as pd 

df1 = pd.DataFrame({'A': [1, 0, 2], 
        'B': [2, 0, 1], 
        'tmp': 1}) 

df2 = pd.DataFrame({'l1': ['a', 'b'], 
        'l2': ['a', 'c'], 
        'tmp': 1}) 

print pd.merge(df1, df2, on='tmp', how='outer') 

Sonuç:

A B tmp l1 l2 
0 1 2 1 a a 
1 1 2 1 b c 
2 0 0 1 a a 
3 0 0 1 b c 
4 2 1 1 a a 
5 2 1 1 b c 
0

İşte alternatif bir çözüm:

import pandas as pd 

df1 = pd.DataFrame({'val1': [1,0,2], 'val2': [2,0,1]) 
df2 = pd.DataFrame({'l1': ['a', 'b'], 'l2': ['a', 'c']) 
df_list = [] 

for x in df1.index: 
    series = df1.iloc[x, :] 
    series_list = [series for _ in range(len(df2.index))] 
    temp_df = pd.DataFrame(series_list, index=range(len(df2.index))) 
    df_list.append(pd.concat((temp_df, df2), axis=1, join='inner')) 

final_df = pd.concat(df_list) 

Hangi üretir:

final_df 
    val1 val2 l1 l2 
0  1  2 a a 
1  1  2 b c 
0  0  0 a a 
1  0  0 b c 
0  2  1 a a 
1  2  1 b c