Python 基于其他数据帧上的条件创建数据帧

Python 基于其他数据帧上的条件创建数据帧,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有两个数据帧: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()

我有两个数据帧: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=0时,则
0

2.当
sd!=0
然后检查该行的dd中是否至少有一个非零值,如果有-获取非零值的平均值,如果没有返回
确定

以下是我想要得到的:

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将这三个条件连接在一起

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')
np.where(sd[0]==0,0,np.where(dd.eq(0).all(1),'OK',dd.mask(dd==0.mean(1)))
输出[232]:
数组(['0'、'0.3333'、'-0.3333'、'0.5'、'0.65',

使用
numpy“确定”、“0”],数据类型=”。选择:

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)


谢谢你的帮助。我用了一种完全不同的方式。 我用过:

不同之处在于它返回的是浮点值(对于非“OK”的行),而不是字符串。它看起来也快了一点。

Nice one:-)np.select
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')