[英]pandas dataframe manipulation with DictVectorize
我有的:
目標 | 變量1 | 變量2 |
---|---|---|
1 | 傑克、瓊斯、菲爾 | 恩-我們 |
0 | 唐、山姆、鮑勃 | vn-en |
1 | 瓊斯、亞歷克斯、山姆 | 恩-我們 |
我想要的是:
變量1 | 目標 | 沒有目標 | 變量2 |
---|---|---|---|
瓊斯 | 2 | 0 | 恩-我們 |
目標列是目標為 1 時出現多少“瓊斯”
到目前為止,我已經嘗試使用 DictVetorize,它幫助我計算了目標等於 1 的次數,但我知道如何獲取 var2 列
IIUC,您可以使用:
df['target'].mul(df['var1'].str.count('jones')).sum()
output: 2
對於獲取所有名稱的更通用的方法:
out = (df
.assign(var1=df['var1'].str.split(',\s*').where(df['target'].eq(1)))
.explode('var1')
.groupby(['var1', 'var2'], as_index=False)
.sum()
)
output:
var1 var2 target
0 alex en-us 1
1 jack en-us 1
2 jones en-us 2
3 phil en-us 1
4 sam en-us 1
(df
.assign(var1=df['var1'].str.split(',\s*'),
target=np.where(df['target'].eq(1), 'target', 'no_target'),
value=1
)
.explode('var1')
.pivot_table(index=['var1', 'var2'], columns='target', values='value',
aggfunc='sum', fill_value=0)
.reset_index().rename_axis(columns=None)
.groupby(['var1'], as_index=False)
.agg({'target': 'sum', 'no_target': 'sum', 'var2': 'first'})
)
output:
var1 target no_target var2
0 alex 1 0 en-us
1 bob 0 1 vn-en
2 don 0 1 vn-en
3 jack 1 0 en-us
4 jones 2 0 en-us
5 phil 1 0 en-us
6 sam 1 1 en-us
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.