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

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

按行條件計數(shù)保留所有列而不迭代數(shù)據(jù)幀

按行條件計數(shù)保留所有列而不迭代數(shù)據(jù)幀

哆啦的時光機 2023-09-12 20:02:02
我正在努力解決熊貓的條件計數(shù)問題。問題我有一個 pandas 數(shù)據(jù)框,有 4 列(為了這個例子):“id”、“id2”、“col1”和“type”。類型列可以有3個值,即“A”、“B”和“C”。我想做的是,對于每一行,計算具有相同 id 和 id2 的類型 C 的數(shù)量。這是一個示例數(shù)據(jù)框:    id   id2 col1 type0   "e"  "z"   0   "A"1   "e"  "z"   1   "C"2   "e"  "z"   2   "C"3   "e"  "y"   3   "C"4   "e"  "y"   4   "A"  5   "f"  "y"   4   "A"6   "f"  "x"   3   "B"7   "f"  "x"   4   "B"8   "g"  "w"   5   "C"9   "g"  "w"   6   "B"構(gòu)建示例數(shù)據(jù)框的代碼:pd.DataFrame({    "id":   ["e", "e", "e", "e", "e", "f", "f", "f", "g", "g"],    "id2":  ["z", "z", "z", "y", "y", "x", "x", "x", "w", "w"],    "col1": [ 0 ,  1 ,  2 ,  3 ,  4 ,  4 ,  3 ,  4 ,  5 ,  6 ],    "type": ["A", "C", "C", "C", "A", "A", "B", "B", "C", "B"]})以及期望的結(jié)果:    id   id2 col1 type  count0   "e"  "z"   0   "A"    21   "e"  "z"   1   "C"    22   "e"  "z"   2   "C"    2 3   "e"  "y"   3   "C"    14   "e"  "y"   4   "A"    15   "f"  "y"   4   "A"    06   "f"  "x"   3   "B"    07   "f"  "x"   4   "B"    08   "g"  "w"   5   "C"    19   "g"  "w"   6   "B"    1我并不真正關(guān)心類型為“C”的行(例如第1、2、3、8行)會發(fā)生什么,所以如果它們沒有出現(xiàn)在結(jié)果數(shù)據(jù)框中,這不是問題。我想要一個不依賴于通過數(shù)據(jù)集迭代“我自己”的解決方案(不應(yīng)用也不for循環(huán)),因為它們太慢了。我希望找到一種解決問題的“pandaic”方法。注意:在“真實”數(shù)據(jù)集中,有 3 列用于索引,類型可以有 5 個不同的值,并且應(yīng)保留 36 個數(shù)據(jù)列。但我更喜歡可擴展的解決方案,不受這些數(shù)量的限制。我嘗試過的我可以使用 sqlalchemy 和查詢來解決問題。事實上,結(jié)果應(yīng)該與以下查詢匹配:SELECT a.*, (SELECT COUNT(*)             FROM df b             WHERE                  b.id  = a.id  AND                 b.id2 = a.id2 AND                 b.type = "C")FROM df a最初的問題也可以改寫為“相當于這個查詢的Python代碼是什么?”。我也可以使用 apply 來解決問題。由于數(shù)據(jù)集的大小,兩者都非常慢,盡管 sql 方法可能很慢,因為它必須首先構(gòu)建數(shù)據(jù)庫。相關(guān)文章這篇文章幾乎解決了問題,但不適用于外部數(shù)據(jù)列,也不適用于多個索引,并且我無法將它們適應(yīng)我的示例。這條線接近我正在尋找的內(nèi)容,唯一的問題是它只保留您分組的列:df.groupby(["id", "id2", "type"]).size().unstack().reset_index()如果缺少任何信息,請告訴我。感謝您花時間閱讀我的帖子,并對拼寫錯誤表示歉意!
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

嘗試這個:


answer = df.groupby(['id','id2']).transform(sum)['type'].str.count('C')

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


  id id2  col1  type  type

0  e   z     0     A     2

1  e   z     1     C     2

2  e   z     2     C     2

3  e   y     3     C     1

4  e   y     4     A     1

5  f   x     4     A     0

6  f   x     3     B     0

7  f   x     4     B     0

8  g   w     5     C     1

9  g   w     6     B     1

您可以將 groupby 中的列增加到您想要的數(shù)量/數(shù)量。


查看完整回答
反對 回復(fù) 2023-09-12
  • 1 回答
  • 0 關(guān)注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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