python - Pandas Dataframes - 根据列标题添加字段

标签 python pandas dataframe

我有一个 pandas 数据框,其中列标题中包含一些我想要添加到每一行的信息。数据框如下所示:

print working_df

  Retail Sales of Electricity : Arkansas : Industrial : Annual  \
Year                                                                 
0                                           16709.19272              
1                                           16847.75502              
2                                           16993.92202              
3                                           16774.69902              
4                                           14710.29400          

  Retail Sales of Electricity : Arizona : Residential : Annual  \
Year                                                                 
0                                           33138.47860              
1                                           32922.97001              
2                                           33079.07402              
3                                           32448.13802              
4                                           32846.84298     

[8 rows x 701 columns]

如何从列名称中提取两个变量(州,例如亚利桑那州和部门,例如工业或住宅)并将它们分别作为两个新列中的行的值?

我希望有类似的字段

Year      State              Sector                      Sales                       
0         Arizona            Residential                 33138.47860              
1         Arizona            Residential                 32922.97001              
2         Arizona            Residential                 33079.07402              
3         Arizona            Residential                 32448.13802              
4         Arizona            Residential                 32846.84298    
0         Arkansas           Industrial                  16709.19272              
1         Arkansas           Industrial                  16847.75502              
2         Arkansas           Industrial                  16993.92202              
3         Arkansas           Industrial                  16774.69902              
4         Arkansas           Industrial                  14710.29400   

最佳答案

我想我会做类似的事情

d2 = df.unstack().reset_index()
d2 = d2.rename(columns={0: "Sales"})
parts = d2.pop("level_0").str.split(":")
d2["State"] = [p[1].strip() for p in parts]
d2["Sector"] = [p[2].strip() for p in parts]

产生

>>> d2
   Year        Sales     State       Sector
0     0  16709.19272  Arkansas   Industrial
1     1  16847.75502  Arkansas   Industrial
2     2  16993.92202  Arkansas   Industrial
3     3  16774.69902  Arkansas   Industrial
4     4  14710.29400  Arkansas   Industrial
5     0  33138.47860   Arizona  Residential
6     1  32922.97001   Arizona  Residential
7     2  33079.07402   Arizona  Residential
8     3  32448.13802   Arizona  Residential
9     4  32846.84298   Arizona  Residential

[10 rows x 4 columns]

你可以更大胆一点,用 str.extract 做点什么-- str.extract(r".*?:\s*(?P<State>.*?)\s*:\s*(?P<Sector>.*?)\s*:.*") ,也许——但我认为这并不值得。

关于python - Pandas Dataframes - 根据列标题添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23033762/

相关文章:

python - 优化 pandas dataframe 到 json 的成本

python - 将不规则的列表字典转换为 pandas 数据框

python - 如何使用 Pandas 转置行和列?

r - 删除数据框中引用另一个 (R) 中不存在的 ID 的行?

python - 在多索引数据框中创建不存在的列

python - 如何在循环中运行多个 Python 测试用例?

python - 使用 pyca/cryptography 的 DES 密码 (PBEWithMD5AndDES)

python - 在 Python 中给定经纬度数据计算距离矩阵的有效方法

python - 从数据框中的行和列(单元格)中删除重复项,python

Python 类型错误 : an integer is required while working with Sockets