簡體   English   中英

pandas dataframe 使用 DictVectorize 進行操作

[英]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

計數目標/no_target

(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM