2. 求笛卡尔积

  1. # 创建两个有不同索引、但包含一些相同值的Series
  2. In[17]: s1 = pd.Series(index=list('aaab'), data=np.arange(4))
  3. s1
  4. Out[17]: a 0
  5. a 1
  6. a 2
  7. b 3
  8. dtype: int64
  9. In[18]: s2 = pd.Series(index=list('cababb'), data=np.arange(6))
  10. s2
  11. Out[18]: c 0
  12. a 1
  13. b 2
  14. a 3
  15. b 4
  16. b 5
  17. dtype: int64
  1. # 二者相加,以产生一个笛卡尔积
  2. In[19]: s1 + s2
  3. Out[19]: a 1.0
  4. a 3.0
  5. a 2.0
  6. a 4.0
  7. a 3.0
  8. a 5.0
  9. b 5.0
  10. b 7.0
  11. b 8.0
  12. c NaN
  13. dtype: float64

更多

  1. # 当两组索引元素完全相同、顺序也相同时,不会生成笛卡尔积;索引会按照它们的位置对齐。下面的例子,两个Series完全相同,结果也是整数
  2. In[20]: s1 = pd.Series(index=list('aaabb'), data=np.arange(5))
  3. s2 = pd.Series(index=list('aaabb'), data=np.arange(5))
  4. s1 + s2
  5. Out[20]: a 0
  6. a 2
  7. a 4
  8. b 6
  9. b 8
  10. dtype: int64
  1. # 如果索引元素相同,但顺序不同,是能产生笛卡尔积的
  2. In[21]: s1 = pd.Series(index=list('aaabb'), data=np.arange(5))
  3. s2 = pd.Series(index=list('bbaaa'), data=np.arange(5))
  4. s1 + s2
  5. Out[21]: a 2
  6. a 3
  7. a 4
  8. a 3
  9. a 4
  10. a 5
  11. a 4
  12. a 5
  13. a 6
  14. b 3
  15. b 4
  16. b 4
  17. b 5
  18. dtype: int64