Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将函数应用于列表系列,而不在列表中应用_Python_Pandas_Numpy - Fatal编程技术网

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)
。正如我在前面的问答中所说的,没有神奇的功能。据我所知,向下投票(和向上投票)是匿名的。我怀疑大多数下层选民不会留下来关注这些评论。