python - 将列拆分并转换为聚合列
问题描述
我拥有的数据如下所述:
输入:
df = pd.DataFrame({"col1": ["A1", "A2"], "col2": ["B1", "B2"], "2015-1": [231, 432], "2015-2": [456, 324]})
print(df)
col1 col2 2015-1 2015-2
0 A1 B1 231 456
1 A2 B2 432 324
列2015-1
和2015-2
对应于年和月。我要转换的数据如下:
输出:
print(df)
col1 col2 year month values
0 A1 B1 2015 1 231
1 A1 B1 2015 2 456
2 A2 B2 2015 1 432
3 A2 B2 2015 2 324
我想在不构建循环的情况下将数据转换为另一个数据帧,因为我拥有的数据包含很多列和行,这需要很长时间。有什么方法可以在没有循环的情况下将输入转换为输出?
解决方案
我们可以melt
用split
then join
back
s=df.melt(['col1','col2'])
s=s.join(s.variable.str.split('-',expand=True).rename(columns={0:'Year',1:'Month'}))
col1 col2 variable value Year Month
0 A1 B1 2015-1 231 2015 1
1 A2 B2 2015-1 432 2015 1
2 A1 B1 2015-2 456 2015 2
3 A2 B2 2015-2 324 2015 2
推荐阅读
- java - 在Java中循环使用列表的有效方法
- python - Python - 从不同的类调用函数以使用 PyQt 画线错误:“'sip.wrappertype'”
- node.js - 如何读取当前字符串化为“对象承诺”的 JSON 对象
- python - 从python中的dict列表中查找特定值
- reactjs - 如何挂载组件 redux antd jest
- keras - yolov3.cfg 中的 batch 参数和 keras.fit() 中的 batch_size 参数有什么区别?
- javascript - 如何使用单选检查使 div 出现和消失?
- android - java.lang.RuntimeException:非法元数据值:子服务不存在
- arrays - 更新 MongoDB 中数组的特定索引
- dart - 我应该输入类型吗?