第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

迭代、選擇和計(jì)算數(shù)據(jù)幀中的不同索引

迭代、選擇和計(jì)算數(shù)據(jù)幀中的不同索引

胡說叔叔 2021-09-02 16:21:01
我有一個(gè)大數(shù)據(jù)框,這里只是示例數(shù)據(jù):length force   d1  d2  d3  d41   5000    300 300 300 3001.2 5000    300 300 300 3001.4 5000    300 300 300 3001.6 2000    500 300 100 3001.8 2000    600 300 200 3002   3500    500 300 300 3002.2 3500    300 300 300 3002.4 3500    100 300 300 3002.5 1500    100 400 200 3002.6 1500    200 300 200 3003   6000    200 200 200 100我有四個(gè)參數(shù) - d1, d2, d3 and d4. 我想遍歷它們并找到一行和 (row-1) 之間的差異。對(duì)于兩個(gè)參數(shù),這種差異至少應(yīng)出現(xiàn)在一行中(不能更多,也可以更少)。我想我會(huì)向數(shù)據(jù)框中添加一個(gè)新列,d1_test, d2_test, d3_test, d4_test如下所示:df['d1_test'] = df['d1'].diff() != 0所以我會(huì)得到:length force   d1  d2  d3  d4  d1_test d2_test d3_test 4_test1   5000    300 300 300 300 False   False   False   False1.2 5000    300 300 300 300 False   False   False   False1.4 5000    300 300 300 300 False   False   False   False1.6 2000    500 300 100 300 True    False   True    False1.8 2000    600 300 200 300 True    False   True    False2   3500    500 300 300 300 True    False   True    False2.2 3500    300 300 300 300 True    False   False   False2.4 3500    100 300 300 300 True    False   False   False2.5 1500    100 400 200 300 False   True    True    False2.6 1500    200 300 200 300 True    True    False   False3   6000    200 200 400 100 False   True    False   True讓我們考慮每個(gè)參數(shù)(d1, d2, d3, d4)也代表一個(gè)固定值:d1_pos = 30, d2_pos = 40, d3_pos=60, d4_pos=90.然后是我想不通的部分。我想添加一個(gè)新列(帶計(jì)算),例如df['result']當(dāng) d1-d4_test 中的兩個(gè)為真時(shí)查找。我可以用布爾 sum() 來做到這一點(diǎn),所以什么時(shí)候sum==2但我不知道哪兩個(gè)參數(shù)是真。在df['result']我想要這樣的東西:if d1_test AND d2_test = True:          df['force'] / (d2_pos - d1_pos)     elif d1_test AND d3_test = True:          df['force'] / (d3_pos - d1_pos)     elif d1_test AND d4_test = True:          df['force'] / (d4_pos - d1_pos)對(duì)于所有其他組合也類似。我不認(rèn)為這是正確的方法,因?yàn)槲易罱K得到了許多組合。如果參數(shù)數(shù)量發(fā)生變化,例如如果我添加d5, d6, d7.我也嘗試過groupby()對(duì)數(shù)據(jù)進(jìn)行切片,但無法真正弄清楚。我確定那里有更好的解決方案?我希望這是可以理解的。非常感謝。
查看完整描述

2 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

di只要您查找只有 2 的行,此方法就可以適用于任意數(shù)量的列True,假設(shè)您有di_pos某處的列表


list_pos = [30, 40, 60, 90] # [d1_pos ,d2_pos ...


# Use `filter`, `diff` and `values` to get all the values of the columns di_test at once 

arr_bool = (df.filter(like='d').diff() !=0).values


#create a mask where the sum in each row is equal to 2

mask = arr_bool.sum(1) == 2


#get the values in the rows using the list list_pos  and the mask

arr_val = list_pos *arr_bool[mask]


#create the column result using 

df.loc[mask,'result'] = df.loc[mask,'force']/(arr_val[arr_val .nonzero()][1::2] -

                                              arr_val [arr_val .nonzero()][0::2])


print (df)

    length  force   d1   d2   d3   d4      result

0      1.0   5000  300  300  300  300         NaN

1      1.2   5000  300  300  300  300         NaN

2      1.4   5000  300  300  300  300         NaN

3      1.6   2000  500  300  100  300   66.666667

4      1.8   2000  600  300  200  300   66.666667

5      2.0   3500  500  300  300  300  116.666667

6      2.2   3500  300  300  300  300         NaN

7      2.4   3500  100  300  300  300         NaN

8      2.5   1500  100  400  200  300   75.000000

9      2.6   1500  200  300  200  300  150.000000

10     3.0   6000  200  200  200  100  120.000000


查看完整回答
反對(duì) 回復(fù) 2021-09-02
  • 2 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)