Python 将函数应用于列表系列,而不在列表中应用
我有一个数据帧Python 将函数应用于列表系列,而不在列表中应用,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据帧 df = pd.DataFrame({'Binary_List': [[0, 0, 1, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1]]}) df
df = pd.DataFrame({'Binary_List': [[0, 0, 1, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 1]]})
df
Binary_List
0 [0, 0, 1, 0, 0, 0, 0]
1 [0, 1, 0, 0, 0, 0, 0]
2 [0, 0, 1, 1, 0, 0, 0]
3 [0, 0, 0, 0, 1, 1, 1]
我想对每个列表应用一个函数,而不使用apply
,因为apply
在大型数据集上运行时非常慢
def count_one(lst):
index = [i for i, e in enumerate(lst) if e != 0]
# some more steps
return len(index)
df['Value'] = df['Binary_List'].apply(lambda x: count_one(x))
df
Binary_List Value
0 [0, 0, 1, 0, 0, 0, 0] 1
1 [0, 1, 0, 0, 0, 0, 0] 1
2 [0, 0, 1, 1, 0, 0, 0] 2
3 [0, 0, 0, 0, 1, 1, 1] 3
我试过用这个,但没有改进
vfunc = np.vectorize(count_one)
df['Value'] = vfunc(df['Binary_List'])
这给了我错误
df['Value'] = count_one(df['Binary_List'])
要获取列表项的长度,可以使用str函数,如下所示
df=pd.DataFrame({'Binary_List':[[0,0,1,0,0,0],
[0, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 1]]})
df[“二进制列表”].astype(np.str).str.count(“1”)
要获取列表项的长度,可以使用str函数,如下所示
df=pd.DataFrame({'Binary_List':[[0,0,1,0,0,0],
[0, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 1]]})
df[“二进制列表”].astype(np.str).str.count(“1”)
您可以尝试:
您还可以执行以下操作:
pd.Series([np.array(key).sum() for key in df['Binary_List']])
0 1
1 1
2 2
3 3
dtype: int64
您可以尝试:
您还可以执行以下操作:
pd.Series([np.array(key).sum() for key in df['Binary_List']])
0 1
1 1
2 2
3 3
dtype: int64
您不能这样做,因为您正在数据帧中存储
对象
。如果您只是将每个元素存储为自己的单元格,那么这是一个非常简单且非常快速的df.sum(1)
假设它是针对您前面的问题-。使用发布的答案的中间输出,在那里你有二进制数组输出并沿着cols求和-.sum(axis=1)
。我想你需要堆叠和求和:np.vstack(df['binary\u Month\u List'])。sum(1)
。正如我在前面的问答中所说的,没有神奇的功能。据我所知,向下投票(和向上投票)是匿名的。我怀疑大多数反对者不会留下来关注评论。你不能,因为你正在数据框中存储一个对象。如果您只是将每个元素存储为自己的单元格,那么这是一个非常简单且非常快速的df.sum(1)
假设它是针对您前面的问题-。使用发布的答案的中间输出,在那里你有二进制数组输出并沿着cols求和-.sum(axis=1)
。我想你需要堆叠和求和:np.vstack(df['binary\u Month\u List'])。sum(1)
。正如我在前面的问答中所说的,没有神奇的功能。据我所知,向下投票(和向上投票)是匿名的。我怀疑大多数下层选民不会留下来关注这些评论。