第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何在 Pandas 中跨列進(jìn)行 COUNTIFS

如何在 Pandas 中跨列進(jìn)行 COUNTIFS

富國滬深 2023-07-27 10:30:26
我想對跨列中每個(gè)值的數(shù)量進(jìn)行求和。這相當(dāng)于 Excel 中的 COUNTIF。但是,我希望將值填充到列中,而不是單獨(dú)的 groupby 語句中。因此,如果第 1 行有 5 列,其值如下:1, 1, 3, 1, 5那么Rating_1 = 3、Rating_2=0、Rating_3=1、Rating_4= 0、Rating_5 = 1 或 (3, 0, 1, 0, 1)我正在使用以下代碼,并且無法獲取要在循環(huán)中添加的布爾值(我所有的研究表明它們應(yīng)該加起來很好?。,F(xiàn)在,我得到以下(二進(jìn)制)輸出:1, 0, 1, 0, 1(實(shí)際上應(yīng)該是 3, 0, 1, 0, 1)df = pd.DataFrame(np.random.randint(0,5,size=(5, 5)), columns=list('ABCDE'))for val in range(1,6):    df['Rating_' + str(val)] = 0for val in range(1,6):    for row in range(0, df.shape[0]):        df['Rating_' + str(val)][row] = ((df['A'][row] == val) +  (df['B'][row] == val) +  (df['C'][row] == val) +  (df['D'][row] == val) +  (df['E'][row] == val)).sum()我也很高興讓這段代碼變得更干凈、更高效,但最關(guān)心的是讓它工作!提前感謝您的幫助!
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以使用它groupby來創(chuàng)建一個(gè)臨時(shí)數(shù)據(jù)幀,您可以對其進(jìn)行處理并最終與 合并df。


np.random.seed(1) # always add a sample with random state for reproducibility

df = pd.DataFrame(np.random.randint(0,5,size=(5, 5)), columns=list('ABCDE'))



df2 = df.stack().droplevel(-1).reset_index()

df2 = (

    df2.groupby(df2.columns.to_list())

    .size().unstack()

    .fillna(0).astype(int)

)

df = pd.concat([df, df2], axis=1)    

輸出


   A  B  C  D  E  0  1  2  3  4

0  3  4  0  1  3  1  1  0  2  1

1  0  0  1  4  4  2  1  0  0  2

2  1  2  4  2  4  0  1  2  0  2

3  3  4  2  4  2  0  0  2  1  2

4  4  1  1  0  1  1  3  0  0  1

我知道這看起來與在 Excel 中添加公式的方式非常相似,但請考慮將數(shù)據(jù)和結(jié)果保留為單獨(dú)的數(shù)據(jù)幀(即跳過 ),pd.concat以便在進(jìn)一步的代碼中獲得更好的可用性。如果您需要對原始數(shù)據(jù)執(zhí)行其他操作,則必須刪除這些列,這不是常見的做法,并且使用您的代碼的其他人可能不會期望這種行為。


查看完整回答
反對 回復(fù) 2023-07-27
?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊

稍微澄清一下問題。


df

    

   A  B  C  D  E  

0  4  3  4  2  0         

1  0  4  2  3  3          

2  3  4  1  2  1          

3  0  2  3  0  2          

4  2  4  1  3  2  


    

跨行的所需結(jié)果:取第 0 行。


計(jì)算行中 0 的出現(xiàn)次數(shù)。有 1. 將其放入“Ranking_0”列中

計(jì)算行中 1 的出現(xiàn)次數(shù)。有 0 個(gè)。將其放入“Ranking_1”列中

等等


所需輸出:


   A  B  C  D  E  Ranking_0  Ranking_1  Ranking_2  Ranking_3  Ranking_4

0  4  3  4  2  0          1          0          1          1          2

1  0  4  2  3  3          1          0          1          2          1

2  3  4  1  2  1          0          2          1          1          1

3  0  2  3  0  2          2          0          2          1          0

4  2  4  1  3  2          0          1          2          1          1

有很多方法可以做到這一點(diǎn) - 所以我將使用一種對我有用但稍微簡化的方法。


import pandas as pd

import numpy as np


df = pd.DataFrame(np.random.randint(0,5,size=(5, 5)), columns=list('ABCDE'))


# The numbers you want to check for

nums = [0,1,2,3,4]

for num in nums: 

     df['Ranking_'+str(num)] = (df.iloc[:,0:5]).isin({num}).sum(1)

  1. 小心地對前 5 列進(jìn)行求和,否則您將開始在 Ranking_ 列中添加內(nèi)容!這就是我這樣做的原因df.iloc[:,0:5)

  2. 我用它.isin({})只是因?yàn)樗芨蓛簟_€有其他方法。

  3. .sum(1)沿水平行求和(軸=1)


查看完整回答
反對 回復(fù) 2023-07-27
  • 2 回答
  • 0 關(guān)注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號