[英]Python: Select multiple columns in a dataframe from another dataframe without loop
[英]multiple for loop to select special rows from a dataframe in python
我在python中有一個大數據框,我想根據多個for循環選擇特定的行。 有些列包含列表。 我的最終目標是生成一些優化約束並將它們傳遞給另一個軟件:
T S W Arrived Departed
[1,2] [4,2] 1 8 10
[3,4,5] [3] 1 12 18
[6,7] [1,2] 2 10 11
. . . . .
. . . . .
def Cons(row):
if row['W'] == w and sum(pd.Series(row['T']).isin([t])) != 0 and sum(pd.Series(row['S']).isin([s])) != 0:
return 1
for w in range(50):
for s in range(30):
for t in range(12):
df.Situation = df.apply(Cons, axis = 1)
A = df[ (df.Situation == 1) ]
A1 = pd.Series(A.Arrived).tolist()
D1 = pd.Series(A.Departed).tolist()
Time = tuplelist(zip(A1,D1))
我怎樣才能有效地執行此操作,因為通過多個for循環需要很長時間才能運行?
目前,您不斷調整每個嵌套循環的數據幀,其中每次重寫A
並且不會產生增長的結果,而只會產生最后一次迭代。
但是考慮創建所有范圍的交叉連接,然后檢查相等邏輯:
wdf = pd.DataFrame({'w': range(50), 'key': 1})
sdf = pd.DataFrame({'s': range(30), 'key': 1})
tdf = pd.DataFrame({'t': range(12), 'key': 1})
dfs = [wdf, sdf, tdf]
# DATA FRAME OF CROSS PRODUCT w X s X T (N = 18,000)
rangedf = reduce(lambda left,right: pd.merge(left, right, on=['key']), dfs)[['w','s','t']]
# w s t
# 0 0 0 0
# 1 0 0 1
# 2 0 0 2
# 3 0 0 3
# 4 0 0 4
# ...
def Cons(row):
if any((rangedf['w'].isin([row['W']])) & (rangedf['t'].isin([row['T']])) & \
(rangedf['s'].isin([row['S']]))) == True:
return 1
df.Situation = df.apply(Cons, axis = 1)
A = df[ (df.Situation == 1) ].reset_index(drop=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.