gpt4 book ai didi

python - 将列向量转换为多列矩阵

转载 作者:行者123 更新时间:2023-12-04 07:59:52 28 4
gpt4 key购买 nike

我有一个包含 30 个值 (1-30) 的列向量,我想尝试操作这个向量,使其成为第一列中有 5 个值、第二列中有 10 个值、第三列中有 15 个值的矩阵。我将如何使用 Pandas 或 NumPy 实现这一点?

import pandas as pd

#Create data
df = pd.DataFrame(np.linspace(1,20,20))

print(df)

1
2
:
28
29
30
为了得到这样的东西:
# Manipulate the column vector to make columns where the first column has 5
# the second column has 10 and the last column has 15 values
'T1' 'T2' 'T3'
1 6 16
2 7 17
3 8 18
4 9 19
5 10 20
NA 11 21
NA 12 22
NA 13 23
NA 14 24
NA 15 25
NA NA 26
NA NA 27
NA NA 28
NA NA 29
NA NA 30

最佳答案

花了一点时间才知道这是什么系列,发现是三角系列 ,只是一个修改过的。

tri = lambda x:int((0.25+2*x)**0.5-0.5)
这将给出如下结果:

0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 ...


修改后:
modtri = lambda x:int((0.25+2*(x//5))**0.5-0.5)

0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ...


因此,正常三角形系列中的每次出现都会重复 5 次。
以上 modtri函数会直接将索引从 0 开始映射到适当的组 ID。
所以在那之后,这将完成这项工作:
df[0].groupby(modtri).apply(lambda x: pd.Series(x.values)).unstack().T
全面执行:
import pandas as pd
import numpy as np

df = pd.DataFrame(np.linspace(1,30,30))

N = 5 #the increment value

modtri = lambda x:int((0.25+2*(x//N))**0.5-0.5)

df2 = df[0].groupby(modtri).apply(lambda x: pd.Series(x.values)).unstack().T

df2.rename(columns={0: "T1", 1: "T2",2:"T3"},inplace=True)

print(df2)
输出:
     T1    T2    T3
0 1.0 6.0 16.0
1 2.0 7.0 17.0
2 3.0 8.0 18.0
3 4.0 9.0 19.0
4 5.0 10.0 20.0
5 NaN 11.0 21.0
6 NaN 12.0 22.0
7 NaN 13.0 23.0
8 NaN 14.0 24.0
9 NaN 15.0 25.0
10 NaN NaN 26.0
11 NaN NaN 27.0
12 NaN NaN 28.0
13 NaN NaN 29.0
14 NaN NaN 30.0

关于python - 将列向量转换为多列矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66529945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com