Python 将可变大小的数组写入单元格

Python 将可变大小的数组写入单元格,python,pandas,Python,Pandas,我有一个大的数据集,我想使用多个符合条件的行进行卷积计算。我需要首先为每一行计算一个向量,我认为将向量存储在dataframe列中会更有效,这样在进行卷积时可以尝试避免for循环。问题是,向量是可变长度的,我不知道怎么做 以下是我的数据摘要: Date State Alloc P 2012-01-01 AK 3 0.5 2012-01-01 AL 4 0.3 … 每个状态都有不同的Alloc和p值。每个日期和状态都有一行,我的数据帧超过150

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

以下是我的数据摘要:

Date        State  Alloc P
2012-01-01  AK     3     0.5
2012-01-01  AL     4     0.3
…
每个状态都有不同的Alloc和p值。每个日期和状态都有一行,我的数据帧超过15000行

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

[P, np.zeros(Alloc), 1-P]
我不知道如何设置这样的新列。我试过这样的说法:

df['Test'] = [df['P'], np.zeros(df['Alloc'), 1 – df['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

所以答案是这样的。几乎是对的,但不完全正确。这里有几个部分

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

解决方法是在单个列上执行应用。此单列应包含P值和Alloc值。以下是步骤:

创建合并列:

df['temp'] = df[['P','Alloc']].values.tolist()
编写一个函数:

def array_p(x): return [x[0]] + [0]*int(x[1]) + [1 - x[0]]
(int是必需的,因为前一行给出了浮点数。我不需要np.zero)

应用该功能:

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

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

我得到了一个ValueError:Shape of passed values error…-和以前一样我找到了解决办法。一旦我做了更多的测试和清理,我会把它贴在这里。我也知道为什么我会收到错误信息。我会在我的回答中解释这一切。
df['Array'] = temp['temp'].apply(array_p)