Python 计算多列中特定值的数量
我有一个数据框:Python 计算多列中特定值的数量,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框: A B C D E 12 4.5 6.1 BUY NaN 12 BUY BUY 5.6 NaN BUY 4.5 6.1 BUY NaN 12 4.5 6.1 0 NaN 我想计算每行中出现“买入”的次数。预期结果: A B C D E score 12 4.5 6.1 BUY NaN 1 12 BUY BUY 5.6 NaN 2 15 4.
A B C D E
12 4.5 6.1 BUY NaN
12 BUY BUY 5.6 NaN
BUY 4.5 6.1 BUY NaN
12 4.5 6.1 0 NaN
我想计算每行中出现“买入”的次数。预期结果:
A B C D E score
12 4.5 6.1 BUY NaN 1
12 BUY BUY 5.6 NaN 2
15 4.5 6.1 BUY NaN 1
12 4.5 6.1 0 NaN 0
我尝试了以下方法,但对所有行只给出0:
df['score'] = df[df == 'BUY'].sum(axis=1)
请注意,BUY只能出现在B、C、D、E列中
我试图在网上找到解决办法,但令人震惊的是,一个也没有找到
很少的帮助将被感激。谢谢 尝试在轴=1上使用
apply
和lambda
。这将一次拾取每一行作为一个系列。您可以使用条件[row=='BUY']
筛选行,然后使用len()计算'BUY'的数量。
尝试将
apply
与lambda
一起在轴=1上使用。这将一次拾取每一行作为一个系列。您可以使用条件[row=='BUY']
筛选行,然后使用len()计算'BUY'的数量。
或者您可以将
应用
与列表一起使用。计数
:
df['score'] = df.apply(lambda x: x.tolist().count('BUY'), axis=1)
print(df)
输出:
A B C D E score
0 12 4.5 6.1 BUY NaN 1
1 12 BUY BUY 5.6 NaN 2
2 BUY 4.5 6.1 BUY NaN 2
3 12 4.5 6.1 0 NaN 0
A B C D E score
0 12 4.5 6.1 BUY NaN 1
1 12 BUY BUY 5.6 NaN 2
2 BUY 4.5 6.1 BUY NaN 2
3 12 4.5 6.1 0 NaN 0
或者您可以将
应用
与列表一起使用。计数
:
df['score'] = df.apply(lambda x: x.tolist().count('BUY'), axis=1)
print(df)
输出:
A B C D E score
0 12 4.5 6.1 BUY NaN 1
1 12 BUY BUY 5.6 NaN 2
2 BUY 4.5 6.1 BUY NaN 2
3 12 4.5 6.1 0 NaN 0
A B C D E score
0 12 4.5 6.1 BUY NaN 1
1 12 BUY BUY 5.6 NaN 2
2 BUY 4.5 6.1 BUY NaN 2
3 12 4.5 6.1 0 NaN 0
您可以比较,然后求和:
df['score'] = (df[['B','C','D','E']] == 'BUY').sum(axis=1)
这将所有布尔值相加,得到正确的结果
当您执行
df[df=='BUY']
时,您只是用np.nan
替换任何不属于BUY
的内容,然后将axis=1的和取下来就行不通了,因为您在结果中只剩下np.nan
和'BUY'
字符串。因此,您得到所有0。您可以比较,然后求和:
df['score'] = (df[['B','C','D','E']] == 'BUY').sum(axis=1)
import numpy as np
df['score'] = np.count_nonzero(df == 'BUY', axis=1)
这将所有布尔值相加,得到正确的结果
当您执行
df[df=='BUY']
时,您只是用np.nan
替换任何不属于BUY
的内容,然后将axis=1的和取下来就行不通了,因为您在结果中只剩下np.nan
和'BUY'
字符串。因此你得到了所有的0
import numpy as np
df['score'] = np.count_nonzero(df == 'BUY', axis=1)
输出:
A B C D E score
0 12 4.5 6.1 BUY NaN 1
1 12 BUY BUY 5.6 NaN 2
2 BUY 4.5 6.1 BUY NaN 2
3 12 4.5 6.1 0 NaN 0
A B C D E score
0 12 4.5 6.1 BUY NaN 1
1 12 BUY BUY 5.6 NaN 2
2 BUY 4.5 6.1 BUY NaN 2
3 12 4.5 6.1 0 NaN 0
输出:
A B C D E score
0 12 4.5 6.1 BUY NaN 1
1 12 BUY BUY 5.6 NaN 2
2 BUY 4.5 6.1 BUY NaN 2
3 12 4.5 6.1 0 NaN 0
A B C D E score
0 12 4.5 6.1 BUY NaN 1
1 12 BUY BUY 5.6 NaN 2
2 BUY 4.5 6.1 BUY NaN 2
3 12 4.5 6.1 0 NaN 0