将数据帧转换为数组数组 - 熊猫

时间:2021-06-10 05:18:57

标签: python arrays pandas

我正在尝试从 Pandas df 输出一组数组。使用下面的 df,我想将每个唯一的 Group 子集到数组。我还希望为 id 中的每个唯一值生成一个单独的数组。

import pandas as pd

df = pd.DataFrame({'Int_1': [1.0, 2.0, 1.0, 3.0, 1.0, 2.0, 3.0, 2.0], 
               'Int_2': [1.0, 2.0, 2.0, 2.0, 1.0, 1.0, 1.0, 2.0],
               'Period': [1, 1, 1, 1, 2, 2, 2, 2],
               'Group': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
               'id': ['1', '2', '3', '4', '1', '2', '3', '4']})

Group_A = [df[df['Group'] == 'A'][['Int_1','Int_2']].to_numpy()]
Group_B = [df[df['Group'] == 'B'][['Int_1','Int_2']].to_numpy()]

print(Group_A)

预期输出:

[array([[1.0, 1.0],
       [1.0, 1.0]]), array([[1.0, 2.0], 
       [3.0, 1.0]])]

1 个答案:

答案 0 :(得分:1)

如果每个 Group 需要单独的数组,首先通过 boolean indexing 过滤,然后在列表理解中将列转换为 2d array

arrA = [g[['Int_1','Int_2']].to_numpy() for i, g in df[df['Group'] == 'A'].groupby('id')]
print (arrA)
[array([[1., 1.],
       [1., 1.]]), array([[1., 2.],
       [3., 1.]])]

如果需要每个 Groupid 使用的数组:

arr = [g[['Int_1','Int_2']].to_numpy() for i, g in df.groupby(['Group', 'id'])]
print (arr)
[array([[1., 1.],
       [1., 1.]]), array([[1., 2.],
       [3., 1.]]), array([[2., 2.],
       [2., 1.]]), array([[3., 2.],
       [2., 2.]])]