簡體   English   中英

根據其他數據框上的條件創建數據框

[英]Creating dataframe based on conditions on other dataframes

我有兩個數據框:s-1列,d-3列

s = {0: [0, 0.3, 0.5, -0.1, -0.2, 0.7, 0]}
d = {0: [0.1, 0.2, -0.2, 0, 0, 0, 0], 1: [0.3, 0.4, -0.7, 0, 0.8, 0, 0.1], 2: [-0.5, 0.4, -0.1, 0.5, 0.5, 0, 0]}
sd = pd.DataFrame(data=s)
dd = pd.DataFrame(data=d)
result = pd.DataFrame()

我想基於這兩個值獲取結果數據框(1列):
1.當sd = 0sd = 0時, sd = 0 0
2.當sd != 0檢查該行是否在dd中至少有一個非零值,如果是,則-獲得非零值的平均值,如果否,則返回OK

這是我想要得到的:

results:
0   0
1   -0,033
2   -0,333
3   0,5
4   0,65
5   OK
6   0

我知道我可以使用dd[dd != 0].mean(axis=1)來計算該行的非零值的平均值,但是我不知道如何將所有這三個條件連接在一起

兩次使用np.where

np.where(sd[0]==0,0,np.where(dd.eq(0).all(1),'OK',dd.mask(dd==0).mean(1)))
Out[232]: 
array(['0', '0.3333333333333333', '-0.3333333333333333', '0.5', '0.65',
       'OK', '0'], dtype='<U32')

使用numpy.select

c1 = sd[0].eq(0)
c2 = dd.eq(0).all(1)

res = np.select([c1, c2], [0, 'OK'], dd.where(dd.ne(0)).mean(1))
pd.Series(res)

0                      0
1     0.3333333333333333
2    -0.3333333333333333
3                    0.5
4                   0.65
5                     OK
6                      0
dtype: object

謝謝您的幫助。 我以完全不同的方式做到了。 我用了:

res1 = pd.Series(np.where(sd[0]==0, 0, dd[dd != 0].mean(axis=1))).fillna('OK')

區別在於它返回浮點值(對於不是“ OK”的行),而不是字符串。 它似乎也快一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM