1. 用stack清理变量值作为列名

  1. # 加载state_fruit数据集
  2. In[2]: state_fruit = pd.read_csv('data/state_fruit.csv', index_col=0)
  3. state_fruit
  4. out[2]:

1. 用stack清理变量值作为列名 - 图1

  1. # stack方法可以将所有列名,转变为垂直的一级行索引
  2. In[3]: state_fruit.stack()
  3. out[3]: Texas Apple 12
  4. Orange 10
  5. Banana 40
  6. Arizona Apple 9
  7. Orange 7
  8. Banana 12
  9. Florida Apple 0
  10. Orange 14
  11. Banana 190
  12. dtype: int64
  1. # 使用reset_index(),将结果变为DataFrame
  2. In[4]: state_fruit_tidy = state_fruit.stack().reset_index()
  3. state_fruit_tidy
  4. out[4]:

1. 用stack清理变量值作为列名 - 图2

  1. # 重命名列名
  2. In[5]: state_fruit_tidy.columns = ['state', 'fruit', 'weight']
  3. state_fruit_tidy
  4. out[5]:

1. 用stack清理变量值作为列名 - 图3

  1. # 也可以使用rename_axis给不同的行索引层级命名
  2. In[6]: state_fruit.stack()\
  3. .rename_axis(['state', 'fruit'])\
  4. out[6]: state fruit
  5. Texas Apple 12
  6. Orange 10
  7. Banana 40
  8. Arizona Apple 9
  9. Orange 7
  10. Banana 12
  11. Florida Apple 0
  12. Orange 14
  13. Banana 190
  14. dtype: int64
  1. # 再次使用reset_index方法
  2. In[7]: state_fruit.stack()\
  3. .rename_axis(['state', 'fruit'])\
  4. .reset_index(name='weight')
  5. out[7]:

1. 用stack清理变量值作为列名 - 图4

更多

  1. # 读取state_fruit2数据集
  2. In[8]: state_fruit2 = pd.read_csv('data/state_fruit2.csv')
  3. state_fruit2
  4. out[8]:

1. 用stack清理变量值作为列名 - 图5

  1. # 州名不在行索引的位置上,使用stack将所有列名变为一个长Series
  2. In[9]: state_fruit2.stack()
  3. out[9]: 0 State Texas
  4. Apple 12
  5. Orange 10
  6. Banana 40
  7. 1 State Arizona
  8. Apple 9
  9. Orange 7
  10. Banana 12
  11. 2 State Florida
  12. Apple 0
  13. Orange 14
  14. Banana 190
  15. dtype: object
  1. # 先设定state作为行索引名,再stack,可以得到和前面相似的结果
  2. In[10]: state_fruit2.set_index('State').stack()
  3. out[10]: 0 State Texas
  4. Apple 12
  5. Orange 10
  6. Banana 40
  7. 1 State Arizona
  8. Apple 9
  9. Orange 7
  10. Banana 12
  11. 2 State Florida
  12. Apple 0
  13. Orange 14
  14. Banana 190
  15. dtype: object