這是一個非常簡單的娛樂,雖然真正的 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 回答

烙印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
添加回答
舉報
0/150
提交
取消