簡體   English   中英

Pandas dataframe 列匹配和分組依據

[英]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_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}

利用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM