Python 在索引行和数据帧中的每一行之间查找公共非空列
我想找出索引行和数据帧之间常见的非空列的百分比。例如: df(指数)= 和df1=Python 在索引行和数据帧中的每一行之间查找公共非空列,python,pandas,Python,Pandas,我想找出索引行和数据帧之间常见的非空列的百分比。例如: df(指数)= 和df1= A B C D E F 1 3 5 NaN 7 NaN NaN 2 4 NaN 3 2 7 6 NaN 5 2 NaN 2 NaN 5 NaN 7 3 我在寻找非空公共列的百分比。因此理想的结果是: A B C D E F Common% 1 3 5 NaN 7 NaN 75
A B C D E F
1 3 5 NaN 7 NaN
NaN 2 4 NaN 3 2
7 6 NaN 5 2 NaN
2 NaN 5 NaN 7 3
我在寻找非空公共列的百分比。因此理想的结果是:
A B C D E F Common%
1 3 5 NaN 7 NaN 75
NaN 2 4 NaN 3 2 75
7 6 NaN 5 2 NaN 50
2 NaN 5 NaN 7 3 100
提前感谢如果我正确理解了您的问题,应该这样做:
df['Common%'] = (df == index).sum() / index.shape * 100
请注意,只有当
索引
是一个系列
时,这才有效。如果我正确理解了您的问题,这应该可以:
df['Common%'] = (df == index).sum() / index.shape * 100
请注意,只有当索引
是一个系列
时,这才有效。您可以执行以下操作:
# create mask for non-nan values
v = ~np.isnan(df)
w = ~np.isnan(df1)
# count non zeros of intersection
a = np.count_nonzero(np.logical_and(w, v), axis=1)
# count non zeros of v (number of non-nan values in df)
b = np.count_nonzero(v)
# find common percentage
print((a / b) * 100)
输出
[ 75. 75. 50. 100.]
A B C D E F common
0 1.0 3.0 5.0 NaN 7 NaN 75.0
1 NaN 2.0 4.0 NaN 3 2.0 75.0
2 7.0 6.0 NaN 5.0 2 NaN 50.0
3 2.0 NaN 5.0 NaN 7 3.0 100.0
可以按如下方式添加新列:
df1['common'] = (a / b) * 100
print(df1)
输出
[ 75. 75. 50. 100.]
A B C D E F common
0 1.0 3.0 5.0 NaN 7 NaN 75.0
1 NaN 2.0 4.0 NaN 3 2.0 75.0
2 7.0 6.0 NaN 5.0 2 NaN 50.0
3 2.0 NaN 5.0 NaN 7 3.0 100.0
你可以做:
# create mask for non-nan values
v = ~np.isnan(df)
w = ~np.isnan(df1)
# count non zeros of intersection
a = np.count_nonzero(np.logical_and(w, v), axis=1)
# count non zeros of v (number of non-nan values in df)
b = np.count_nonzero(v)
# find common percentage
print((a / b) * 100)
输出
[ 75. 75. 50. 100.]
A B C D E F common
0 1.0 3.0 5.0 NaN 7 NaN 75.0
1 NaN 2.0 4.0 NaN 3 2.0 75.0
2 7.0 6.0 NaN 5.0 2 NaN 50.0
3 2.0 NaN 5.0 NaN 7 3.0 100.0
可以按如下方式添加新列:
df1['common'] = (a / b) * 100
print(df1)
输出
[ 75. 75. 50. 100.]
A B C D E F common
0 1.0 3.0 5.0 NaN 7 NaN 75.0
1 NaN 2.0 4.0 NaN 3 2.0 75.0
2 7.0 6.0 NaN 5.0 2 NaN 50.0
3 2.0 NaN 5.0 NaN 7 3.0 100.0
我不明白公共值是什么意思?所以对于df1中的第一行,AB C和E是非空的,而在df(索引)中,A C E和F是非空的。因此,两者之间存在共同点。所以{A,C,E}/{A,C,E,F}=3/4,等于75%,我不明白公共值是什么意思?所以对于df1中的第一行,ab C和E是非空的,而在df(索引)中,A C E和F是非空的。因此,两者之间存在共同点。所以{A,C,E}/{A,C,E,F}=3/4,等于75%