计算一个数据帧中两个单独的列中的值不相等的次数的百分比

时间:2018-12-09 02:56:38

标签: python pandas dataframe

我有一个包含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相结合。

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

这为您提供了YN在第3列或第4列中出现的次数,占这两个列中条目总数的百分比。如果您希望在两列中同时显示NY的次数,则可以将每列中的字符串连接起来,然后对组合进行计数:

(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