我有以下資料框。
df = pd.DataFrame({'1': ['A','.','.','X','.','.'],
'2':['.','.','.','.','A','.'],
'3':['.','.','.','.','.','.'],
'4':['.','.','.','.','.','X']})
我想確定出現“A”的所有實體,并檢查“X”是否出現在接下來的 3 行中。
之后,我想根據這些條件執行命令。
我正在嘗試做的一個例子是......
for i, idx in df.iterrows():
if idx == A:
if X exists within next 3 rows:
x= idx['1']
y= idx['2']
任何幫助將不勝感激。
uj5u.com熱心網友回復:
如果您要解釋您真正想做的事情,我相信其他答案可能會起作用。它會更有效,因為迭代行很慢。
但是,這是一個基于以下的解決方案iterrows:
mask = df.eq('X').any(1)
mask = mask.where(mask).bfill(limit=3).fillna(False)
for idx, row in df.iterrows():
if 'A' in row.values and mask[idx]:
x = row['1']
y = row['2']
print(f'row {idx} matches: {x=}, {y=}')
示例輸入(與您的略有不同):
1 2 3 4
0 A . . .
1 . . . .
2 . . A .
3 . . . .
4 X A . .
5 . . X .
輸出:
row 2 matches: x='.', y='.'
row 4 matches: x='X', y='A'
uj5u.com熱心網友回復:
IIUC,您想識別有值A的單元格,如果在接下來的 3 行中,還有一個值X
為了清楚起見,我將使用一個更直觀的示例(A/X/.):
0 1 2 3 4 5
0 A . . A . A
1 . . X . A .
2 . A . . . A
3 . X . X . X
4 X . . . . .
我們可以使用eq找到搜索值和where bfill(limit=3) .fillna的第二掩模延伸到以前行。
# mask for the A
m1 = df.eq('A')
# mask for the X in the next 3 lines
m2 = df.eq('X')
m2 = m2.where(m2).bfill(limit=3).fillna(False)
# example of how to use the masks: replacing A with O
df[m1&m2] = 'O'
示例輸出:
0 1 2 3 4 5
0 A . . O . O
1 . . X . A .
2 . O . . . O
3 . X . X . X
4 X . . . . .
檢查任何列的 X
只需將第二個掩碼更改為:
m2 = df.eq('X').any(1)
m2 = m2.where(m2).bfill(limit=3).fillna(False)
使用此掩碼輸出:
0 1 2 3 4 5
0 O . . O . O
1 . . X . O .
2 . O . . . O
3 . X . X . X
4 X . . . . .
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/405546.html
標籤:
下一篇:3個資料集在R中結合為1個條件
