2017-05-08 47 views
1

我期待结合数据框df1和df2来获取Python中的df3,最好是在一行中(即,对于df1.LETS中的所有x都是“no”。 ..“)。结合两个不同的数据框来显示所有可能的迭代

我该说什么和我的谷歌福来使用电流损耗,所以在这里我在StackExchange,希望另一个程序员可以帮助填补我的这种困境的精神空白。

谢谢!

df1 df2  df3 
LETS NUMS  LETS NUMS 
A  1  A  1 
B  2  A  2 
     3  A  3 
     4  A  4 
       B  1 
       B  2 
       B  3 
       B  4 

回答

1
pd.DataFrame(index=pd.MultiIndex.from_product([df1.LETS, df2.NUMS], 
          names=("LETS", "NUMS"))).reset_index() 
# LETS NUMS 
#0 A  1 
#1 A  2 
#2 A  3 
#3 A  4 
#4 B  1 
#5 B  2 
#6 B  3 
#7 B  4 
2

您可以使用:

df1 = pd.DataFrame({'LETS':list('AB')}) 
df2 = pd.DataFrame({'NUMS':range(1,5)}) 

cross join解决方案与merge + assignconstantdrop帮手列A柱:

df = pd.merge(df1.assign(A=1), df2.assign(A=1), on='A').drop('A', axis=1) 
print (df) 
    LETS NUMS 
0 A  1 
1 A  2 
2 A  3 
3 A  4 
4 B  1 
5 B  2 
6 B  3 
7 B  4 

在大熊猫0.20.1另一个与MultiIndex.from_product和新功能的解决方案 - MultiIndex.to_frame

df = pd.MultiIndex.from_product([df1['LETS'], df2['NUMS']]).to_frame() 
df.columns = ['LETS','NUMS'] 
print (df) 
    LETS NUMS 
A 1 A  1 
    2 A  2 
    3 A  3 
    4 A  4 
B 1 B  1 
    2 B  2 
    3 B  3 
    4 B  4 

print (df.reset_index(drop=True)) 
    LETS NUMS 
0 A  1 
1 A  2 
2 A  3 
3 A  4 
4 B  1 
5 B  2 
6 B  3 
7 B  4 
相关问题