说我有两个像这样的熊猫数据框
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_countsdf2['values2'].value_counts() when df1['values'] == 1 and
df2['values2'].value_counts() when df1['values'] == 0
答案 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