har*_*141 2 python vectorization pandas
我不确定如何构建我想在 Pandas 中向量化的函数。
我有两个 df 这样的:
contents = pd.DataFrame({
'Items': [1, 2, 3, 1, 1, 2],
})
cats = pd.DataFrame({
'Cat1': ['1|2|4'],
'Cat2': ['3|2|5'],
'Cat3': ['6|9|11'],
})
Run Code Online (Sandbox Code Playgroud)
我的目标是为每一行添加.insert一个新列contents,1如果contents['Items']是元素cats['cat1']或0其他。这是要重复每cat。
目标格式:
contents = pd.DataFrame({
'Items': [1, 2, 3, 1, 1, 2],
'contains_Cat1': [1, 1, 0, 1, 1, 1],
'contains_Cat2': [0, 1, 1, 0, 0, 1],
'contains_Cat3': [0, 0, 0, 0, 0, 0],
})
Run Code Online (Sandbox Code Playgroud)
由于我的内容 df 很大(!),我想对其进行矢量化。我对每只猫的做法是做这样的事情
contents.insert(
loc=len(contents.columns),
column='contains_Cat1',
value=has_content(contents, cats['Cat1'])
def has_content(contents: pd.DataFrame, cat: pd.Series) -> pd.Series:
# Initialization of pd.Series here??
if contents['Items'] in cat:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何构建我的has_content(...)? 我特别不清楚的是我如何初始化 pd.Series 以包含所有False值。我什至需要吗?在那之后,我知道如何检查某些东西是否包含在其他东西中。但是我真的可以像上面那样按列执行并立即返回而不会变成单元格吗?
尝试str.get_dummies然后用stack和重塑unstack
out = cats.stack().str.get_dummies().stack()\
.unstack(level=1).reset_index(level=0,drop=True)\
.reindex(contents.Items.astype(str))
Out[229]:
Cat1 Cat2 Cat3
Items
1 1 0 0
2 1 1 0
3 0 1 0
1 1 0 0
1 1 0 0
2 1 1 0
Run Code Online (Sandbox Code Playgroud)
改进:
out=cats.stack().str.get_dummies().droplevel(0).T\
.add_prefix('contains_').reindex(contents['Items'].astype(str)).reset_index()
Out[230]:
Items contains_Cat1 contains_Cat2 contains_Cat3
0 1 1 0 0
1 2 1 1 0
2 3 0 1 0
3 1 1 0 0
4 1 1 0 0
5 2 1 1 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |