如何基于另一个数据框列python中的值进行value_counts?

时间:2019-08-07 05:39:19

标签: python pandas dataframe

说我有两个像这样的熊猫数据框

data1 = [[s1, 0], [s2, 0], [s3, 1], [s4, 1], [s5, 0], [s6, 1], [s7, 0], [s8, 1]] 
df1 = pd.DataFrame(data1, columns = ['s_no', 'values']) 

data2 = [[s1, 0], [s2, 1], [s3, 1], [s4, 0], [s5, 0], [s6, 1], [s7, 1], [s8, 0]] 
df2 = pd.DataFrame(data2, columns = ['s_no2', 'values2']) 

如何找到

的value_counts
df2['values2'].value_counts() when df1['values'] == 1 and 

df2['values2'].value_counts() when df1['values'] == 0

1 个答案:

答案 0 :(得分:3)

首先在两个DataFrame中必须具有相同的索引值和大小,因此可能会合并在一起,然后可以使用boolean indexing

可以检查是否对齐正确,是否需要进行下一步处理的数据。

df = pd.concat([df1, df2], axis=1)
print (df)
  s_no  values s_no2  values2
0   s1       0    s1        0
1   s2       0    s2        0
2   s3       1    s3        1
3   s4       1    s4        1
4   s5       0    s5        0
5   s6       1    s6        1
6   s7       0    s7        0
7   s8       1    s8        1

print (df.loc[df['values'] == 1, 'values2'].value_counts())
1    4
Name: values2, dtype: int64

print (df.loc[df['values'] == 0, 'values2'].value_counts())
0    4
Name: values2, dtype: int64

print (df.groupby('values')['values2'].value_counts())
values  values2
0       0          4
1       1          4
Name: values2, dtype: int64

或者可以使用df1, df2进行过滤-但如果数据有问题,则检查起来并不容易:

print (df2.loc[df1['values'] == 1, 'values2'].value_counts())
1    4
Name: values2, dtype: int64

print (df2.loc[df1['values'] == 0, 'values2'].value_counts())
0    4
Name: values2, dtype: int64

print (df2['values2'].groupby(df1['values']).value_counts())
values  values2
0       0          4
1       1          4
Name: values2, dtype: int64