我有一個包含x、y坐標的df,看起來像這樣:
我有一個包含x、y坐標的df,看起來像這樣:
x y
280 230
230 247 247
219 255 255
209 270
203 290 290
199 313 313
198 336
204 365
208 372 372
220 392 372
253 429 429
281 448 448
...
我創建的函式必須一次接收4個x坐標和4個相應的y坐標,但是我不知道如何在一個df中迭代并一次傳遞4行資料。以下是我目前函式呼叫的一個例子:
my_function(ax, ay, bx, by, cx, cy, dx, dy)
函式的呼叫不一定要這樣,我只需要能夠訪問所有4個x和y坐標。
我應該如何將資料傳入我的函式中?
謝謝你!
uj5u.com熱心網友回復:
假設你想向你的函式傳遞連續的行片,你可以每4行分組,并將資料幀壓扁,以獲得你需要的形狀。
def my_function(ax, ay, bx, by, cx, cy, dx, dy)。
return f'ax={ax}, ay={ay}, bx={bx}, by={by}, cx={cx}, cy={cy}, dx={dx}, dy={dy}'
df.groupby(df.index//4).apply(lambda x: my_function(*x.to_numpy() .ravel())
輸出
0 ax=280, ay=230, bx=230, by=247, cx=219, cy=255。 ...
1 ax=203, ay=290。bx=199, by=313, cx=198, cy=336. .
2 ax=208, ay=372。bx=220, by=392, cx=253, cy=429。 .
d型別。object。
本例中使用的資料框架
import pandas as pd
import io
t = ''
x y
280 230
230 247
219 255
209 270
203 290
199 313
198 336
204 365
208 372
220 392
253 429
281 448''
df = pd.read_csv(io.StringIO(t), sep='s '/span>)
df
輸出
x y
0 280 230
1 230 247
2 219 255
3 209 270
4 203 290
5 199 313
6 198 336
7 204 365
8 208 372
9 220 392
10 253 429
11 281 448
uj5u.com熱心網友回復:
如果你使用的是Pandas,那么你可以利用pandas.DataFrame.items()方法(或者檔案中顯示的替代方法之一)。
如果你想在每次迭代中瀏覽多行,那么一種方法是迭代一個zip(),該方法以同一個生成器的四個實體為引數,或者更簡單,在每次迭代中呼叫生成器四次,并設定適當的while回圈條件,以檢查是否耗盡。
uj5u.com熱心網友回復:
你可以使用np.range(len(df))/4設定一個自定義的分組,以使4人一組。
在資料框中獲得函式輸出:
df.groupby(np.range(len(df))//4).apply(lambda g: g.values.flatten()
輸出:
0 [280, 230, 230, 247, 219, 255, 209, 270]
1 [203, 290, 199, 313, 198, 336, 204, 365]
2 [208,372,220,392。253, 429, 281, 448]
d型別。object] dtype: object。
在每個組中應用一個函式,并在資料框架外獲得結果:
for name, g in df. groupby(np.range(len(df))//4)。)
print(f'group: {name}')
print(g.values.flatten() ) # 用你的函式替換這里的print。
輸出:
group: 0
[280 230 230 247 219 255 209 270]
組。1] 組:1
[203 290 199 313 198 336 204 365]
組。2] 組:2
[208 372 220 392 253 429 281 448]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/309179.html
標籤:
