python - Python 重新创建数据框
问题描述
我有一个数据框如下:
df =
yy mm col1 col2
2020 7 0.22 10
2020 7 0.50 30
2020 7 0.60 40
2020 7 0.50 70
2020 7 0.60 90
我想将数据帧分成 3 部分并将其转置,使其结果为:
yy mm col1 col2 col1 col2 col1 col2
2020 7 0.22 10 0.60 40 0.60 90
2020 7 0.50 30 0.50 70 NaN NaN
到目前为止,我所做的是:
a = np.array_split(df,3)
a =
[ yy mm col1 col2
2020 7 0.22 10
2020 7 0.50 30,
yy mm col1 col2
2020 7 0.60 40,
2020 7 0.50 70
yy mm col1 col2
2020 7 0.60 90]
后来我将 a 中列表的每个元素转换为数据框: a0 = a[0], a1 = a[1] 和 a2=a[2] 然后再做 pandas.concat([a0,a1,a2], axis = 1,键= ['yy','mm'])。但是,如果我有更大的数据框 df 并将其拆分为许多部分(而不仅仅是 3 个),我的解决方案会很麻烦。谢谢你。
解决方案
尝试这个:
df=pd.DataFrame({'yy':[2020]*5,'mm':[7]*5,'col1':[0.22,0.5,0.6,0.5,0.6],'col2':[10,30,40,70,90]})
length=2
lis=[]
i=0
while i<(len(df)/length)+length:
lis.append(df.iloc[i:i+length,:].reset_index(drop=True))
i+=length
final=pd.concat(lis,axis=1)
唯一的缺点是前两列也重复了。需要找到一种解决方法。
或者您可以:
df=pd.DataFrame({'yy':[2020]*5,'mm':[7]*5,'col1':[0.22,0.5,0.6,0.5,0.6],'col2':[10,30,40,70,90]})
a=np.array_split(df,len(df)/length)
pd.concat([i.reset_index(drop=True) for i in a],axis=1)
推荐阅读
- mysql - 如何在不显示结果的情况下执行 MySQL 函数
- c# - 如何遍历字符串数组并将每个元素添加到对象数组
- docker - Web API 端点可与 docker-compose.yml 一起使用,但当我仅使用 Dockerfile 进行构建和运行时则不行
- math - SSIS · 三角函数
- python - 如何创建生成其他代码的代码
- html - HTML:float left 不适用于 *ngFor 的所有元素
- wpf - 将 Image.Source 绑定到带有变音符号的字符串 - 找不到文件
- ubuntu - Kvm 嵌套 Virtualbox windows 来宾
- c# - 在 MacOS 上使用 Babelfor 混淆代码后无法运行应用程序
- java - Java中的内部类覆盖