如何使用一个变量来表示np中的条件。对于具有列表值的pandas中的列,在哪里?

2024-10-01 04:44:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用np.where来计算基于其他条件的列内部。 我想修改else条件。 我还得用** df1['matches'].fillna('0]',inplace=True)**否则它给出了不同的错误

代码:

df1 = pd.read_csv('one.txt',sep = '\t')
df1['matches'].fillna('[0]',inplace = True) 
df1['scorehigh?']  = df1['league'].apply(lambda a: 'yes' if a == 'Active' or a == 'Super Active' else 'no')
df1['greaterthan10?'] = (['yes' if any(int(a)>10 for a in i) else 'no' 
                                      for i in df1['matches'].str.findall('\d+')])

m=np.where((df1['scorehigh?']=='yes')) & (df1['matches'] != '[0]')                    

df1['Finals?']  = np.where((df1['scorehigh?']=='yes') & (df1['greaterthan10?'] == 'yes'), 'YES', m)
a=df1['Finals?'].value_counts()
print(a)

错误:

setting an array element with a sequence.

输入:

league          matches
Active          [[1, 0, 50,], [2, 0, 14,]]
Active          [[1, 0, 0,], [2, 0, 4,]]
Active          [[1, 0, 50,], [2, 0, 14,]]
Super Active    [[1, 0, 50,], [2, 0, 14,]]
Low             [[1, 0, 50,], [2, 0, 14,]]
Low             [[1, 0, 5,], [2, 0, 5,]]
Low             [[1, 0, 40,], [2, 0, 10,]]
Super Active    
Super Active    
Super Active    
Super   
Low 

预期产出:

league               matches                                   greater_than_10?
Active               [[1, 0, 50,], [2, 0, 14,]]                yes
Active               [[1, 0, 0,], [2, 0, 4,]]                  no
Active               [[1, 0, 50,], [2, 0, 14,]]                yes
Super Active         [[1, 0, 50,], [2, 0, 14,]]                yes
Low                  [[1, 0, 50,], [2, 0, 14,]]                no
Low                 [[1, 0, 5,], [2, 0, 5,]]                   no
Low                 [[1, 0, 40,], [2, 0, 10,]]                 no
Super Active           [0]                                     no
Super Active           [0]                                     no
Super Active           [0]                                     no
Super                  [0]                                     no
Low                    [0]                                     no

使用值后应为。计数

Yes: 3
No: 4

Tags: nonpwhere条件elseyeslowactive
1条回答
网友
1楼 · 发布于 2024-10-01 04:44:18

问题在于:

m=np.where((df1['scorehigh?']=='yes')) & (df1['matches'] != '[0]')

如果掩码输出后没有参数,则为匹配值的位置数组


df1['matches'].fillna('[0]',inplace = True) 


df1['scorehigh?']  = df1['league'].apply(lambda a: 'yes' if a == 'Active' or a == 'Super Active' else 'no')
df1['greaterthan10?'] = (['yes' if any(int(a)>10 for a in i) else 'no' 
                                      for i in df1['matches'].str.findall('\d+')])

如果不匹配,请将嵌套的^{}与指定的None一起使用,对于第二个掩码也是仅使用df1['matches'] != '[0]'

df1['Finals?'] = np.where((df1['scorehigh?']=='yes')&(df1['greaterthan10?'] == 'yes'), 'YES',
                 np.where(df1['matches'] != '[0]', 'NO', None))

^{}

df1['Finals?'] = np.select([(df1['scorehigh?']=='yes')&  (df1['greaterthan10?'] == 'yes'), 
                            df1['matches'] != '[0]'], ['YES', 'NO'], default=None)

print (df1)
          league                     matches scorehigh? greaterthan10? Finals?
0         Active  [[1, 0, 50,], [2, 0, 14,]]        yes            yes     YES
1         Active    [[1, 0, 0,], [2, 0, 4,]]        yes             no      NO
2         Active  [[1, 0, 50,], [2, 0, 14,]]        yes            yes     YES
3   Super Active  [[1, 0, 50,], [2, 0, 14,]]        yes            yes     YES
4            Low  [[1, 0, 50,], [2, 0, 14,]]         no            yes      NO
5            Low    [[1, 0, 5,], [2, 0, 5,]]         no             no      NO
6            Low  [[1, 0, 40,], [2, 0, 10,]]         no            yes      NO
7   Super Active                         [0]        yes             no    None
8   Super Active                         [0]        yes             no    None
9   Super Active                         [0]        yes             no    None
10         Super                         [0]         no             no    None
11           Low                         [0]         no             no    None

a=df1['Finals?'].value_counts()
print(a)
NO     4
YES    3
Name: Finals?, dtype: int64

如果使用,两个条件输出不同:

df1['Finals?'] = np.select([(df1['scorehigh?']=='yes')&  (df1['greaterthan10?'] == 'yes'), 
                            (df1['scorehigh?']=='yes') & (df1['matches'] != '[0]')], 
                            ['YES', 'NO'], default=None)
print (df1)
          league                     matches scorehigh? greaterthan10? Finals?
0         Active  [[1, 0, 50,], [2, 0, 14,]]        yes            yes     YES
1         Active    [[1, 0, 0,], [2, 0, 4,]]        yes             no      NO
2         Active  [[1, 0, 50,], [2, 0, 14,]]        yes            yes     YES
3   Super Active  [[1, 0, 50,], [2, 0, 14,]]        yes            yes     YES
4            Low  [[1, 0, 50,], [2, 0, 14,]]         no            yes    None
5            Low    [[1, 0, 5,], [2, 0, 5,]]         no             no    None
6            Low  [[1, 0, 40,], [2, 0, 10,]]         no            yes    None
7   Super Active                         [0]        yes             no    None
8   Super Active                         [0]        yes             no    None
9   Super Active                         [0]        yes             no    None
10         Super                         [0]         no             no    None
11           Low                         [0]         no             no    None

a=df1['Finals?'].value_counts()
print(a)
YES    3
NO     1
Name: Finals?, dtype: int64

相关问题 更多 >