Pandas的merge和groupby用法

1.merge用来连接两个DataFrame对象,参数on选择基于哪个列进行连接,how选择内连接,左连接还是全连接的方式。merge操作类似于SQL中的join操作。

[python]  view plain  copy
  1. import pandas as pd  
  2. df1 = pd.DataFrame({'key':['b','b','a','c','a','b'],'data1':range(6)})  
  3. df2 = pd.DataFrame({'key':['a','b','a','b','d'],'data2':range(5)})  
  4. print df1  
  5. print df2  
  6. #    data1 key  
  7. # 0      0   b  
  8. # 1      1   b  
  9. # 2      2   a  
  10. # 3      3   c  
  11. # 4      4   a  
  12. # 5      5   b  
  13. #    data2 key  
  14. # 0      0   a  
  15. # 1      1   b  
  16. # 2      2   a  
  17. # 3      3   b  
  18. # 4      4   d  
  19. df3 = pd.merge(df1,df2,on = 'key',how = 'left')  
  20. print df3  
  21. #     data1 key  data2  
  22. # 0       0   b    1.0  
  23. # 1       0   b    3.0  
  24. # 2       1   b    1.0  
  25. # 3       1   b    3.0  
  26. # 4       2   a    0.0  
  27. # 5       2   a    2.0  
  28. # 6       3   c    NaN  
  29. # 7       4   a    0.0  
  30. # 8       4   a    2.0  
  31. # 9       5   b    1.0  
  32. # 10      5   b    3.0  

2.对于大数据,很可能要对于其中的部分列进行聚合,这里使用groupby
[python]  view plain  copy
  1. import numpy as np  
  2. import pandas as pd  
  3. df = pd.DataFrame({'key1':['a','a','b','b','a'],  
  4.                    'key2':['one','two','one','two','one'],  
  5.                    'data1':np.random.randn(5),  
  6.                    'data2':np.random.randn(5)})  
  7. print df  
  8. #       data1     data2 key1 key2  
  9. # 0  0.336673  0.540336    a  one  
  10. # 1 -0.821839 -1.348654    a  two  
  11. # 2  1.066305  0.230884    b  one  
  12. # 3  0.788950 -0.540482    b  two  
  13. # 4 -0.872019 -0.813607    a  one  
  14. df1 = df[['data1','data2']].groupby(df['key1']).sum()  
  15. print df1  
  16. #          data1     data2  
  17. # key1  
  18. # a     0.827444  1.512656  
  19. # b    -0.060730 -0.461793  
  20. print df.groupby('key1')[['data1','data2']].sum()   #简便写法  
  21. #          data1     data2  
  22. # key1  
  23. # a     0.827444  1.512656  
  24. # b    -0.060730 -0.461793  
注意,这里还可以利用字典对表进行分组聚合,这里以行聚合为例(以列分组聚合只要修改字典并把axis设置成1)

[python]  view plain  copy
  1. import numpy as np  
  2. import pandas as pd  
  3. df = pd.DataFrame({'key1':['a','a','b','b','a'],  
  4.                    'key2':['one','two','one','two','one'],  
  5.                    'data1':np.random.randn(5),  
  6.                    'data2':np.random.randn(5)})  
  7. print df  
  8. #       data1     data2 key1 key2  
  9. # 0  0.336673  0.540336    a  one  
  10. # 1 -0.821839 -1.348654    a  two  
  11. # 2  1.066305  0.230884    b  one  
  12. # 3  0.788950 -0.540482    b  two  
  13. # 4 -0.872019 -0.813607    a  one  
  14. mapping = {0:'one',1:'one',2:'two',3:'two',4:'two'}  
  15. print df.groupby(mapping,axis = 0).sum()  
  16. #         data1     data2  
  17. # one  2.044990  0.916197  
  18. # two  2.310946 -2.240196

猜你喜欢

转载自blog.csdn.net/u011630575/article/details/80436352