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

han*_*zgs 5 python dataframe pandas

假设我有两个 pandas 数据框

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']) 
Run Code Online (Sandbox Code Playgroud)

如何找到 value_counts

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

df2['values2'].value_counts() when df1['values'] == 0
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 3

首先,两个 s 中必须具有相同的索引值和大小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
Run Code Online (Sandbox Code Playgroud)

或者可以使用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
Run Code Online (Sandbox Code Playgroud)