pandas 如何计算一列值在一列列表中的出现次数?

pkbketx9  于 2023-01-15  发布在  其他
关注(0)|答案(3)|浏览(177)

考虑以下 Dataframe :

column_of_lists   scalar_col
0   [100, 200, 300]       100
1   [100, 200, 200]       200
2   [300, 500]            300
3   [100, 100]            200

所需的输出将是一个Series,表示标量值scalar_col在list列中出现的次数。
因此,在我们的案例中:
我试过一些类似的方法:

df['column_of_lists'].apply(lambda x: x.count(df['scalar_col'])

我知道它不会工作,因为我要求它计算一个Series,而不是一个值。
任何帮助都是受欢迎的!

6qfn3psc

6qfn3psc1#

使用列表理解:

df['new'] = [x.count(y) for x,y in zip(df['column_of_lists'], df['scalar_col'])]
print (df)
   column_of_lists  scalar_col  new
0  [100, 200, 300]         100    1
1  [100, 200, 200]         200    2
2       [300, 500]         300    1
3       [100, 100]         200    0

如果性能不重要,请将DataFrame.applyaxis=1配合使用:
x一个一个一个一个x一个一个二个x

wsxa1bj1

wsxa1bj12#

使用计数和应用。

    • 代码:**
import pandas as pd
in_df = pd.DataFrame({"column_of_lists": [[100, 200, 300] , 
                                        [100, 200, 200], 
                                        [300, 500], [100, 100]],
            "scalar_col": [100, 200, 300, 200]})
in_df["Match_Count"] = in_df.apply(lambda x:x["column_of_lists"].count(x["scalar_col"]), axis=1)
    • 输出:**
column_of_lists  scalar_col  Match_Count
0  [100, 200, 300]         100            1
1  [100, 200, 200]         200            2
2       [300, 500]         300            1
3       [100, 100]         200            0
2ic8powd

2ic8powd3#

较大列表的矢量化方法是先使用DataFrame.explode,然后使用GroupBy.sum

x = df.explode('column_of_lists')
df['counts'] = x.column_of_lists.eq(x.scalar_col).groupby(x.index).sum()

产出

column_of_lists  scalar_col  counts
0  [100, 200, 300]         100       1
1  [100, 200, 200]         200       2
2       [300, 500]         300       1
3       [100, 100]         200       0

相关问题