将多个 int 列/行合并为一个 numpy 数组(熊猫数据框)

Posted

技术标签:

【中文标题】将多个 int 列/行合并为一个 numpy 数组(熊猫数据框)【英文标题】:Merge multiple int columns/rows into one numpy array (pandas dataframe) 【发布时间】:2019-07-04 12:19:39 【问题描述】:

我有一个包含几列和几行的 pandas 数据框。我想将列合并为一个,然后将基于iddate 的行合并为一个。

目前我正在这样做:

df['matrix'] = df[[col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15,col16,col17,col18,col19,col20,col21,col22,col23,col24,col25,col26,col27,col28,col29,col30,col31,col32,col33,col34,col35,col36,col37,col38,col39,col40,col41,col42,col43,col44,col45,col46,col47,col48]].values.tolist()
df = df.groupby(['id','date'])['matrix'].apply(list).reset_index(name='matrix')

这给了我list 形式的矩阵。 后来我把它转换成numpy.ndarray 使用:

df['matrix'] = df['matrix'].apply(np.array)

这是我数据集的一小部分供参考:

id,date,col0,col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15,col16,col17,col18,col19,col20,col21,col22,col23,col24,col25,col26,col27,col28,col29,col30,col31,col32,col33,col34,col35,col36,col37,col38,col39,col40,col41,col42,col43,col44,col45,col46,col47,col48
16,2014-06-22,0,0,0,10,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
16,2014-06-22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
16,2014-06-22,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
16,2014-06-22,3,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0
16,2014-06-22,4,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0

虽然上述代码适用于小型数据集,但有时会在较大的数据集上崩溃。特别是df['matrix'].apply(np.array) 声明。

有没有一种方法可以让我执行合并以获取numpy.array?这样可以节省很多时间。

【问题讨论】:

你最终拥有 2 个Series.apply。您可能只需 df[[f'coli'for i in range(0,48)]].groupby([df.id, df.date]).apply(np.array) 就可以减少一切 @ALollz df['matrix'].apply(np.array) 语句使系统崩溃。因此,我想要一个替代品。即使在 for 循环中使用它也无济于事。不管怎样,我也会试试这个。 @ALollz 请验证代码语句的语法,它给了我错误 什么版本的python? @ALollz Python 3.6.7 【参考方案1】:

一开始不需要合并列。使用 groupby 拆分 DataFrame,然后将结果展平

matrix=df.set_index(['id','date']).groupby(['id','date']).apply(lambda x: x.values.flatten())

【讨论】:

以上是关于将多个 int 列/行合并为一个 numpy 数组(熊猫数据框)的主要内容,如果未能解决你的问题,请参考以下文章

numpy的array合并-老鱼学numpy

即使无法使用numpy进行均分,也要按列拆分数组

如何将 int numpy 数组的列乘以浮点数并保持在 int 中?

如何将多个csv按行合并?(不是首尾相接的按列合并)

SAP HANA SQL - 将单个列的多个结果行合并为单个行

我有两个numpy数组列表,我希望将它们合并为一个numpy数组列表