Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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 Dataframe-统计列表元素的出现次数_Python_Pandas_Dataframe_Counter - Fatal编程技术网

Python Dataframe-统计列表元素的出现次数

Python Dataframe-统计列表元素的出现次数,python,pandas,dataframe,counter,Python,Pandas,Dataframe,Counter,我有以下数据帧: 新列包含列表中从0到5的数字(每个数字和交易的金额可能不同)。我想计算每个事务中每个数字的出现次数,并将该数字保存在另一个数据框中,如下所示: 我刚刚为Cat_0创建了一个lambda函数来测试它,不幸的是,它无法工作,因为它正在创建“None”条目(参见图2) 这就是功能: df_cat["Cat_0"] = df_train["basket_new"].map(lambda x: df_cat["Cat_0"]+

我有以下数据帧:

新列包含列表中从0到5的数字(每个数字和交易的金额可能不同)。我想计算每个事务中每个数字的出现次数,并将该数字保存在另一个数据框中,如下所示:

我刚刚为Cat_0创建了一个lambda函数来测试它,不幸的是,它无法工作,因为它正在创建“None”条目(参见图2)

这就是功能:

df_cat["Cat_0"] = df_train["basket_new"].map(lambda x: df_cat["Cat_0"]+1 if "0" in x else None)
您能告诉我我做错了什么/如何解决我的问题吗?

使用以下方法:

使用数据的前5行:

for i in range(0,5): df_cat["Cat_{0}".format(i)] = df['basket'].map(lambda x: x.count(i))

   Cat_0  Cat_1  Cat_2  Cat_3  Cat_4  Cat_5
0      0      0      0      1      0      0
1      1      0      0      2      0      1
2      0      1      0      1      1      1
3      0      0      1      0      0      0
4      0      0      0      0      4      0

使用
分解
交叉表
。 假设您有这样一个df:

df = pd.DataFrame({'a':[1,2,3,4], 'b':[[1,2],[0],[3,1,2,3],[4,2,2,2,1]]})
df:

    a   b
0   1   [1, 2]
1   2   [0]
2   3   [3, 1, 2, 3]
3   4   [4, 2, 2, 2, 1]



如果要重命名列,请执行以下操作:

df[['a', 'b']].join(pd.crosstab(df1.index, df1, colnames=['b']).add_prefix('cat_'))


这是一个相当长的一个,但它的工作

df.explode('basket_new').groupby(['transaction_id','customerType','basket_new']).agg(count = ('basket_new','count'))\
.reset_index().pivot_table(index=['transaction_id','customerType'], columns='basket_new', values='count', fill_value=0)\
.reset_index()

这可能是一个比我“更好”的答案。更多的熊猫是索尼克人。我还可以想象,对于大型数据集,速度要快得多。
    a   b               0   1   2   3   4
0   1   [1, 2]          0   1   1   0   0
1   2   [0]             1   0   0   0   0
2   3   [3, 1, 2, 3]    0   1   1   2   0
3   4   [4, 2, 2, 2, 1] 0   1   3   0   1
df[['a', 'b']].join(pd.crosstab(df1.index, df1, colnames=['b']).add_prefix('cat_'))
    a   b               cat_0  cat_1  cat_2 cat_3 cat_4
0   1   [1, 2]          0      1      1     0     0
1   2   [0]             1      0      0     0     0
2   3   [3, 1, 2, 3]    0      1      1     2     0
3   4   [4, 2, 2, 2, 1] 0      1      3     0     1
df.explode('basket_new').groupby(['transaction_id','customerType','basket_new']).agg(count = ('basket_new','count'))\
.reset_index().pivot_table(index=['transaction_id','customerType'], columns='basket_new', values='count', fill_value=0)\
.reset_index()