向数据框添加一列,根据子字符串对另一个数据框求和

Add a column to dataframe summing another dataframe based on substring

我正在尝试将一列附加到数据框,该列将根据字符串单元格的内容对另一个数据框的计数求和。我的数据框如下所示:

listy = pd.DataFrame(
    ['auto', 'ford', 'chevy', 'auto worker', 'ford motors', 'chevy trucks'])

listy['count'] = np.random.randint(1,500,size=6)
listy
0 count
0 auto 24
1 ford 45
2 chevy 384
3 auto worker 81
4 ford motors 156
5 chevy trucks 66

lister = pd.DataFrame(['auto','ford','chevy'])
0
0 auto
1 ford
2 Chevy

我正在尝试向 lister 数据框添加一列,该列对任何行的 listy['count'] 求和,其中 ['0'] 包含 listy[0]

的值

我得到了以下代码来处理单个单词

listy[listy[0].str.contains("auto")]['count'].sum()

哪个 returns 我正在寻找的值。我的实际数据集有数千行,因此手动收集总数是行不通的。

我试过以下代码:

lister['total'] = listy[listy[0].str.contains(lister[0])]

并得到错误

TypeError: 'Series' objects are mutable, thus they cannot be hashed

我试过谷歌搜索但无济于事。这可能吗?

我也尝试过在多词列上使用拆分,但仍然无法计算出总数。

非常感谢任何帮助。

这将对 listy 中字符串分组的计数求和 lister:

listy.groupby(lister['0']).sum().reset_index()

    0       count
0   Chevy   384
1   auto    24
2   ford    45

如果需要,可以使用以下内容进行分配:

df_x = listy.groupby(lister['0']).sum().reset_index()

使用pandas.Series.str.extract的一种方式:

pat = f"({'|'.join(lister[0])})"
df = listy.groupby(listy[0].str.extract(pat, expand=False))["count"].sum()
print(df.reset_index())

输出:

       0  count
0   auto    697
1  chevy    806
2   ford    302