我正在尝试从 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]])]
答案 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.]])]
如果需要每个 Group
和 id
使用的数组:
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.]])]