在pandas数据帧中分组,并联合一个numpy数组列

2024-04-26 18:43:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个CSV文件,其中一列看起来像一个numpy数组。前几行如下所示

first,second,third
170.0,2,[19 234 376]
170.0,3,[19 23 23]
162.0,4,[1 2 3]
162.0,5,[1 3 4]

当我用pandas数据框加载这个CSV时,使用以下代码

^{pr2}$

现在,我想根据“第一”列分组,并将“第三”列合并。这样做之后,我的数据帧应该是

170.0, [19 23 234 376]
162.0, [1 2 3 4]

我如何实现这一点?我尝试了以下几种方法,但似乎没有什么能帮助实现这个目标。在

group_data = data.groupby('first')
group_data['third'].apply(lambda x: np.unique(np.concatenate(x)))

Tags: 文件csv数据方法代码numpypandasdata
1条回答
网友
1楼 · 发布于 2024-04-26 18:43:47

对于当前的csv文件,“第三”列以字符串形式出现,而不是列表。在

可能有更好的方法来转换为列表,但是这里是。。。在

from ast import literal_eval

data = pd.read_csv('test_groupby.csv')

# Convert to a string representation of a list...
data['third'] = data['third'].str.replace(' ', ',')

# Convert string to list...
data['third'] = data['third'].apply(literal_eval)

group_data=data.groupby('first')

# Two secrets here revealed
# x.values instead of x since x is a Series
# list(...) to return an aggregated value
#     (np.array should work here, but...?)
ans = group_data.aggregate(
      {'third': lambda x: list(np.unique(
                               np.concatenate(x.values)))})

print(ans)
                    third
first                    
162          [1, 2, 3, 4]
170    [19, 23, 234, 376]

相关问题 更多 >