我正在尝试聚合其中一列包含某些网址的数据集。请考虑以下数据集
import pandas as pd
df = pd.DataFrame({"ID": [1, 1, 1, 2, 2],
"Website": ["https://www.auctionbid.com",
"https://www.google.com",
"https://www.awesomeauctions.net",
"https://www.awesomeauctions.net",
"http://www.auctionnoitcua.com"
]
})
我想进行以下分析:
(
df
.groupby("ID")
.agg({"Website": lambda x:
"; ".join([site for site in x if x.str.contains("auction")])
})
)
这导致ValueError
表明系列的真值是模糊的。 this question接受的答案表明if
可以隐式地将操作数转换为bool
,并建议使用“按位”运算符。
那么,我的问题是如何为&
实现|
和if
的等价物?
答案 0 :(得分:2)
您的比较不起作用,因为x是整个系列,而不仅仅是您正在处理的项目。这有效:
df.groupby("ID")['Website'].agg(lambda x: "; ".join([site for site in x.values if "auction" in site]))
答案 1 :(得分:2)
您可以使用pandas builtin pd.Series.str.contains
和pd.Series.str.cat
方法明确实现此目的:
join_func = lambda x: x[x.str.contains("auction")].str.cat(sep="; ")
df.groupby("ID").agg({"Website": join_func})