我在Pandas中构建3D DataFrame时遇到了困难.我想要这样的东西
A B C
start end start end start end ...
7 20 42 52 90 101
11 21 213 34
56 74 9 45
45 12
Run Code Online (Sandbox Code Playgroud)
where A
,B
等是顶级描述符,start
并且end
是subdescriptors.随后的数字是成对的,并且没有相同数量的对A
,B
等等.观察A
有四个这样的对,B
只有1,并且C
有3个.
我不知道如何继续构建这个DataFrame.修改这个例子没有给我设计输出:
import numpy as np
import pandas as pd
A = np.array(['one', 'one', 'two', 'two', 'three', 'three'])
B = np.array(['start', 'end']*3)
C = [np.random.randint(10, 99, 6)]*6
df = pd.DataFrame(zip(A, B, C), …
Run Code Online (Sandbox Code Playgroud) 建立:
pdf = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
pdf['a'][2:]=pdf['a'][0]
pdf['a'][:2]=pdf['a'][1]
pdf.set_index(['a','b'])
Run Code Online (Sandbox Code Playgroud)
输出:
c d e
a b
0.439502 0.115087 0.832546 0.760513 0.776555
0.609107 0.247642 0.031650 0.727773
0.995370 0.299640 0.053523 0.565753 0.857235
0.392132 0.832560 0.774653 0.213692
Run Code Online (Sandbox Code Playgroud)
每个数据系列按索引ID分组,a
并b
表示其他功能的时间索引a
.有没有办法让大熊猫产生反映a
分组的numpy 3d数组?目前它将数据读取为二维pdf.shape
输出(4, 5)
.我想要的是数组是变量形式:
array([[[-1.38655912, -0.90145951, -0.95106951, 0.76570984],
[-0.21004144, -2.66498267, -0.29255182, 1.43411576],
[-0.21004144, -2.66498267, -0.29255182, 1.43411576]],
[[ 0.0768149 , -0.7566995 , -2.57770951, 0.70834656],
[-0.99097395, -0.81592084, -1.21075386, 0.12361382]]])
Run Code Online (Sandbox Code Playgroud)
是否有本地Pandas方式来做到这一点?请注意,a
实际数据中每个分组的行数是可变的,因此我不能只是转置或重塑pdf.values
.如果没有本地方式,那么从数十万行和数百列迭代构建数组的最佳方法是什么?
我是 Python 新手,我正在尝试了解如何使用 Pandas DataFrames 操作数据。我搜索了类似的问题,但没有看到任何满足我的确切需求的问题。如果这是重复的,请指出正确的帖子。
所以我有多个具有完全相同的形状、列和索引的 DataFrame。我如何将它们与标签结合起来,以便我可以轻松访问带有任何列/索引/标签的数据?
例如,在下面的设置之后,如何将 df1 和 df2 放入一个 DataFrame 并用名称“df1”和“df2”标记它们,以便我可以像 df['A']['df1'] 这样的方式访问数据['b'],并获取 df 的行数?
>>> import numpy as np
>>> import pandas as pd
>>> df1 = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'], index=['a', 'b'])
>>> df2 = pd.DataFrame([[5, 6], [7, 8]], columns=['A', 'B'], index=['a', 'b'])
>>> df1
A B
a 1 2
b 3 4
>>> df2
A B
a 5 6
b 7 8
Run Code Online (Sandbox Code Playgroud)