向数据框添加一列,根据子字符串对另一个数据框求和
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
我正在尝试将一列附加到数据框,该列将根据字符串单元格的内容对另一个数据框的计数求和。我的数据框如下所示:
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