我有一个包含5列的数据集:
0 1 2 3 4
A Y N N Y
B N Y N N
C N N N N
D Y Y N Y
E N Y Y Y
F Y Y N Y
G Y N N Y
我想计算Y在第3列和第4列中出现的时间百分比,以及在这两列中出现N的时间百分比。
我知道如何单独使用
df['3'].value_counts(normalize=True) * 100
但是无法弄清楚如何将3和4相结合。
答案 0 :(得分:1)
通过将第3列和第4列融合在一起,可以获得value_counts
:
df[['3','4']].melt().value.value_counts(normalize=True) * 100
输出:
N 57.142857
Y 42.857143
Name: value, dtype: float64
这为您提供了Y
和N
在第3列或第4列中出现的次数,占这两个列中条目总数的百分比。如果您希望在两列中同时显示N
或Y
的次数,则可以将每列中的字符串连接起来,然后对组合进行计数:
(df['3'] + df['4']).value_counts(normalize=True) * 100
输出:
NY 57.142857
NN 28.571429
YY 14.285714
dtype: float64
这是我在上面的答案中用于生成输出的完整代码:
import pandas as pd
from io import StringIO
d = '''0 1 2 3 4
A Y N N Y
B N Y N N
C N N N N
D Y Y N Y
E N Y Y Y
F Y Y N Y
G Y N N Y'''
df = pd.read_csv(StringIO(d), sep='\s+')
totalcount = df[['3','4']].melt().value.value_counts(normalize=True) * 100
print('percentage of times each value appears as an entry in either column\n%s\n' % totalcount)
paircount = (df['3'] + df['4']).value_counts(normalize=True) * 100
print('percentage of times each pair of values occurs across columns\n%s\n' % paircount)
答案 1 :(得分:1)
使用:
print((df['3']+df['4'])[~(df['3']+df['4']).isin(['NY','YN'])].value_counts(normalize=True)*100)
输出:
NN 66.666667
YY 33.333333
dtype: float64
答案 2 :(得分:0)
计算第3列和第4列中Y的位置
((df['3']=='Y') & (df['4']=='Y')).value_counts(normalize=True) * 100
计算第3列和第4列中N的位置
((df['3']=='N') & (df['4']=='N')).value_counts(normalize=True) * 100
答案 3 :(得分:0)
使用melt
df[['3','4']].melt().value.value_counts(normalize=True)
Out[8]:
N 0.571429
Y 0.428571
Name: value, dtype: float64