亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

根據許多列和值從數據框中獲取行

根據許多列和值從數據框中獲取行

一只斗牛犬 2022-07-05 19:21:16
這是一個非常簡單的娛樂,雖然真正的 DF 有更多的列我的數據框:    length  width  height  age0        1      5       8   121        1      5       8   122        1      5       8   213        1      5       8   154        1      5       8   155        1      6       9   126        2      6       9   327        2      6       9   328        2      6       7   989        3      4       7   1210       3      4       7   5411       3      4       7   21我想獲取 和 的width == 6 行 age ==32。很簡單:d[(d['width']==6) & (d['age']==32)]   length  width  height  age6       2      6       9   327       2      6       9   32有沒有辦法讓這更加自動化?假設我有一個列和值列表。在這種情況下,它仍然只有兩列/值,但我正在考慮處理 15 個或更多:cols = ['width','age']vals = [6,32]現在構建一個空數據框并使用以下內容更新行append:df_temp = pd.DataFrame()for col,val in zip(cols,vals):    if df_temp.empty:        df_temp = df[df[col]==val]    else:        df_temp.append(df[df[col]==val])   length  width  height  age5       1      6       9   126       2      6       9   327       2      6       9   328       2      6       7   98這相當于使用or符號|:d[(d['width']==6) | (d['age']==32)]我怎樣才能使它自動化,AND而不是or?我已經嘗試了一些完全離譜的方法,但它不起作用,它似乎仍然等同于|而不是&.[d[(d[col]==val) & (d[col]==val)] for col, val in zip(cols,vals)][0]   length  width  height  age5       1      6       9   126       2      6       9   327       2      6       9   328       2      6       7   98我的可重現數據框:import pandas as pdpd.DataFrame({'length': pd.Series([1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3],dtype='int64',index=pd.RangeIndex(start=0, stop=12, step=1)), 'width': pd.Series([5, 5, 5, 5, 5, 6, 6, 6, 6, 4, 4, 4],dtype='int64',index=pd.RangeIndex(start=0, stop=12, step=1)), 'height': pd.Series([8, 8, 8, 8, 8, 9, 9, 9, 7, 7, 7, 7],dtype='int64',index=pd.RangeIndex(start=0, stop=12, step=1)), 'age': pd.Series([12, 12, 21, 15, 15, 12, 32, 32, 98, 12, 54, 21],dtype='int64',index=pd.RangeIndex(start=0, stop=12, step=1))}, index=pd.RangeIndex(start=0, stop=12, step=1))
查看完整描述

2 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

這是一種使用assignwith df.equsing locand的方法all

df[df.eq(df.assign(**dict(zip(cols,vals)))).loc[:,cols].all(1)]

   length  width  height  age

6       2      6       9   32

7       2      6       9   32


查看完整回答
反對 回復 2022-07-05
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

我們可以通過在這里使用底層的 numpy 數組來簡化這一點:


df[(df[cols].values == vals).all(1)] 


     length  width  height  age

6       2      6       9   32

7       2      6       9   32


查看完整回答
反對 回復 2022-07-05
  • 2 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號