python - 如何将宽数据帧转换为长数据帧
问题描述
我正在尝试将宽数据帧 [2r, 12c] 转换为长数据帧 [4r,6c)。
From this ...
0 1 2 3 4 5 6 7 8 9 10 11
0 1.0 0.9 0.8 0.5 0.4 0.3 0.7 0.9 0.2 0.1 0.4 0.3
1 0.6 0.8 0.5 0.3 0.7 0.1 0.4 0.2 0.8 0.6 0.4 0.1
... to this ...
0 1 2 3 4 5
0 1.0 0.9 0.8 0.5 0.4 0.3
1 0.7 0.9 0.2 0.1 0.4 0.3
2 0.6 0.8 0.5 0.3 0.7 0.1
3 0.4 0.2 0.8 0.6 0.4 0.1
我的代码产生了意想不到的结果:
0 1 2 3 4 5 6 7 8 9 10 11
0 1.0 0.9 0.8 0.5 0.4 0.3
1 Nan Nan Nan Nan Nan Nan 0.7 0.9 0.2 0.1 0.4 0.3
etc...
我的代码:
import pandas as pd
import numpy as np
df = pd.DataFrame(
np.random.randn(2, 12)
)
slice_sz = 6
x = df.columns
col_num = len(x)
col_iter = int(col_num / slice_sz)
y = df.index
row_num = len(y)
df_list = pd.DataFrame([])
for row in range(row_num):
# print('Processing row', row)
i = 0
j = slice_sz - 1
for col in range(col_iter):
df_sliced = df.iloc[row, i:j]
df_sliced = df_sliced.to_frame()
df_sliced = df_sliced.transpose()
df_list = df_list.append(df_sliced)
df_sliced = []
i += slice_sz
j += slice_sz
我知道必须有一种更优雅的方式来做到这一点。谢谢你的帮助,
解决方案
如果你不喜欢熊猫,我会做这样的事情:
import numpy as np
data = np.random.randn(2, 12)
# reshape is your friend!
data_transformed = data.reshape(4,6)
请numpy.reshape
在此处查看文档:https ://numpy.org/doc/stable/reference/generated/numpy.reshape.html
虽然如果你真的,真的,真的想重塑一个数据框(虽然我不确定你为什么想要),你可以这样做:
import pandas as pd
import numpy as np
df = pd.DataFrame(
np.random.randn(2, 12)
)
df = pd.DataFrame(df.to_numpy().reshape(4,6))
我所做的实际上就是将数据帧转换为 numpy 数组,重塑,然后将 numpy 数组设置回数据帧。
推荐阅读
- php - 在 Laravel 5.8 中验证 .tar 文件上传
- python - 在 Python 中的映射迭代期间替换值是否安全?
- javascript - 如何在没有域的情况下获得 socket.io 的证书(我不喜欢自签名)
- r - R 时间序列数据,按正比分组
- flutter - Flutter SingleChildScrollView 在 Stack 中不起作用
- reactjs - 如何将 TypeScript 与 React / Redux mergeProps 一起使用
- r - How to copy a value in new dataframe based on key links of another dataframe like ID, start and end value? (in R)
- php - Php PDO Mysql 选择值下拉列表
- html - WordPress。使整个 div 类可点击
- shopify - 如何使用 Shopify API 取消和补货?