如何在pandas

时间:2016-09-02 07:11:07

标签: python pandas

对不起,伙计们,我知道这是一个非常基本的问题,我只是一个初学者

In [55]: df1
Out[55]:
   x  y
a  1  3
b  2  4
c  3  5
d  4  6
e  5  7

In [56]: df2
Out[56]:
   y  z
b  1  9
c  3  8
d  5  7
e  7  6
f  9  5

pd.merge(df1,df2)给出:

In [56]: df2
Out[56]:
   x  y  z 
0  1  3  8
1  3  5  7
2  5  7  6

我对合并的使用感到困惑,'0','1','2'是什么意思?例如,当索引为0时,为什么x为1,y为3,z为8?

2 个答案:

答案 0 :(得分:3)

由于pd.merge的默认设置,您得到的是:

merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=False, suffixes=('_x',
'_y'), copy=True, indicator=False)

on : label or list
    Field names to join on. Must be found in both DataFrames. If on is
    None and not merging on indexes, then it merges on the intersection of
    the columns by default.

您尚未将任何密钥传递给on密钥,因此默认情况下它会合并到列的交集处。您的df1df2有不同的索引,因此如果您想要保持左或右,则应指定:

In [43]: pd.merge(df1, df2)
Out[43]:
   x  y  z
0  1  3  8
1  3  5  7
2  5  7  6

In [44]: pd.merge(df1, df2, on='y', left_index=True)
Out[44]:
   x  y  z
c  1  3  8
d  3  5  7
e  5  7  6

In [45]: pd.merge(df1, df2, on='y', right_index=True)
Out[45]:
   x  y  z
a  1  3  8
c  3  5  7
e  5  7  6

答案 1 :(得分:1)

pd.merge的作用是它加入两个数据帧,类似于在关系数据库中使用'JOIN'语句合并两个关系的方式。

使用以下代码合并df1和df2时:pd.merge(df1,df2),您没有指定pd.merge函数的任何其他参数的值,因此它采用以下默认值'inner'对于合并函数的'how'参数,并对df1和df2执行交集操作。 df1和df2共有的列名是'y'。因此,它在df1和df2中搜索'y'列的公共值,并创建一个新的数据框,其中列'x','y','z',其中列'y'具有公共值3,5,7 ,'x'将在df1中具有对应于3,5,7的值,类似地,'z'将具有对应于df2中的3,5,7的值。新数据帧的索引已设置为0,1,2(默认情况下),因为您没有使用left_index,right_index(默认情况下为False)在pd.merge函数调用中指定索引模式。