[英]Pandas dataframe column match and group by
我有两个 dataframe 说 A 和 B 如下:
A = [1,2,3,2,1,3]
B = [1,3,3,1,1,3]
我想将 dataframe A 的每个值与 B 匹配并计算匹配值,例如同一行中共有 2 行值为 1,同一行中有 0 行值为 2,同一行中有 2 行值为 3。
I want output as below:
Value - > Count
1 -> 2
2 -> 0
3 -> 2
我尝试了以下代码,但它只显示匹配行的真假。
print(A.isin(B))
Output:
True
False
True
False
True
True
我厌倦了使用 .count() 和 .value_count() 但无法获得预期值。 有人教我怎么做。
尝试使用==
条件进行boolean 索引,然后使用value_counts
、 reindex
和to_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}
利用:
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
数据
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.