熊猫数据框列匹配和分组依据

时间:2020-05-14 09:06:39

标签: python pandas

我有两个数据框,分别是A和B:

A = [1,2,3,2,1,3]
B = [1,3,3,1,1,3]

我想将数据帧A的每个值与B匹配并计算匹配的值,例如在同一行中共有2行,其中值1,在同一行中有0行,值2在同一行中,在2行中,值3在同一行中行。

I want output as below:
Value - > Count
1 -> 2
2 -> 0
3 -> 2

我尝试了以下代码,但是对于匹配的行,它只显示true和false。

print(A.isin(B))
Output:
True
False
True
False
True
True

我厌倦了使用.count()和.value_count(),但无法获得期望的值。有人教我怎么做。

3 个答案:

答案 0 :(得分:2)

尝试使用==条件的boolean indexing,然后使用value_countsreindexto_dict

A = pd.DataFrame([1,2,3,2,1,3])
B = pd.DataFrame([1,3,3,1,1,3])

d = A[A == B][0].value_counts().reindex(A[0].unique(), fill_value=0).to_dict()
print(d)

[出]

{1: 2, 2: 0, 3: 2}

答案 1 :(得分:1)

使用:

df1 = pd.DataFrame({'A': [1, 2, 3, 2, 1, 3]})
df2 = pd.DataFrame({'B': [1, 3, 3, 1, 1, 3]})

result = (
    df1.assign(Count=df1['A'].eq(df2['B']))
    .groupby('A')['Count'].sum().astype(int)
    .reset_index().rename(columns={'A': "Value"})
)

print(result)

执行完代码后,result将是:

   Value  Count
0      1      2
1      2      0
2      3      2

答案 2 :(得分:0)

数据

df=pd.DataFrame({'A':[1,2,3,2,1,3]})
df1=pd.DataFrame({'B':[1,3,3,1,1,3]})

使用groupby,sort_value进行解析,并删除每个组中保持最高价值的重复项

 df['count']=df[df.A.isin(df1.B)].groupby('A')['A'].transform('count')
 df2=df.sort_values(by='count', ascending=True).drop_duplicates(subset='A', keep="last").fillna(0)
 #df2['count']=df2['count'].sort_values(ascending=True).astype(int)

enter image description here