写入可变大小的数组到Pandas单元格

2024-04-24 07:41:16 发布

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

我有一个很大的数据集,我想使用多行匹配一个条件来进行卷积计算。我需要先为每一行计算一个向量,我认为将向量存储在数据帧列中会更有效,这样在进行卷积时可以尝试避免for循环。问题是,向量的长度是可变的,我不知道怎么做。在

以下是我的数据摘要:

Date        State  Alloc P
2012-01-01  AK     3     0.5
2012-01-01  AL     4     0.3
…

每个状态都有不同的Alloc和p值。每个日期和状态都有一行,我的数据帧超过15000行长。在

对于每个条目,我需要一个如下所示的向量:

^{pr2}$

我想不出如何设置这样的新列。我试过这样的说法:

df['Test'] = [df['P'], np.zeros(df['Alloc'), 1 – df['P']]

但它们不起作用。在

有人有什么想法吗?在

谢谢☺ 在


Tags: 数据dffordate状态条目条件向量
2条回答

答案就在这里。piRSquared几乎是对的,但不完全正确。这里有几个部分。在

apply方法部分起作用。它将一行传递给函数,您可以进行如上所示的计算。问题是,您会收到一条“ValueError:传递的值的形状是…”的错误消息。返回的列数与dataframe中的列数不匹配。我猜这是因为返回值是一个列表,而Pandas没有正确地解释结果。在

解决方法是在单个列上执行apply。这一列应该包含P值和Alloc值。步骤如下:

创建合并列:

df['temp'] = df[['P','Alloc']].values.tolist()

编写函数:

^{pr2}$

(需要int,因为前一行给出了float。我不需要np.零)在

应用函数:

df['Array'] = temp['temp'].apply(array_p)

这是可行的,但显然需要更多的步骤。如果有人能提供更好的答案,我很乐意听到。在

尝试:

def get_vec(x):
    return [x.P] + np.zeros(x['Alloc']).tolist() + [1 - x.P]

df.apply(get_vec, axis=1)

0         [0.5, 0.0, 0.0, 0.0, 0.5]
1    [0.3, 0.0, 0.0, 0.0, 0.0, 0.7]
dtype: object

^{pr2}$

enter image description here

相关问题 更多 >