簡體   English   中英

如何在另一個數據幀列pandas中檢查一個數據幀的列值多少次?

[英]how to check column value of one data frame how many times in another dataframe column pandas?

我有兩個數據幀如下 -

數據幀1-

df1_data = {'sym' :{0:'AAA',1:'BBB',2:'CCC',3:'DDD',4:'EEE',5:'FFF'}}
df = pd.DataFrame(df1_data)

數據幀2-

df2_data = {'sym1' :{0:'AAA',1:'BB',2:'XXX',3:'A',4:'CCC',5:'D',6:'EEE',7:'EEE',8:'FFF'}}
df2 = pd.DataFrame(df2_data)

我想檢查數據幀1中可用的sym列是在數據幀2的sym1列中有多少次?

預期結果 -

   sym,count
0  AAA,1
1  BBB,0
2  CCC,1
3  DDD,0
4  EEE,2
5  FFF,1

這是通過在df2value_counts()上使用sym index join df ,然后填充NaN ,為了查看,請使用reset_index()

In [113]: df.set_index('sym').join(df2.sym1.value_counts()).fillna(0).reset_index()
Out[113]:
   sym  sym1
0  AAA   1.0
1  BBB   0.0
2  CCC   1.0
3  DDD   0.0
4  EEE   2.0
5  FFF   1.0

細節

In [114]: df2.sym1.value_counts()
Out[114]:
EEE    2
CCC    1
XXX    1
FFF    1
BB     1
D      1
AAA    1
A      1
Name: sym1, dtype: int64

或者 ,使用map

In [141]: df['count'] = df['sym'].map(df2.sym1.value_counts()).fillna(0)

In [142]: df
Out[142]:
   sym  count
0  AAA    1.0
1  BBB    0.0
2  CCC    1.0
3  DDD    0.0
4  EEE    2.0
5  FFF    1.0

numpy廣播

df.assign(count=(df.sym.values[:, None] == df2.sym1.values).sum(1))

   sym  count
0  AAA      1
1  BBB      0
2  CCC      1
3  DDD      0
4  EEE      2
5  FFF      1

使用value_countsreindex解決方案, df['sym']中的值必須是唯一的。

print (df2.sym1.value_counts().reindex(df['sym'], fill_value=0).reset_index())
   sym  sym1
0  AAA     1
1  BBB     0
2  CCC     1
3  DDD     0
4  EEE     2
5  FFF     1

一個簡單的方法是:

df['count'] = df['sym'].map(lambda x:list(df2['sym1'].values).count(x))

希望能幫助到你

這是一個解決方案,您只需要迭代df和df2一次:

from collections import defaultdict
vals_dict = defaultdict(list, df2.groupby('sym1').indices)
df['count'] = df['sym'].apply(lambda x: len(vals_dict[x]))
print df

它會將df添加到具有請求值的新列:

   sym  count
0  AAA      1
1  BBB      0
2  CCC      1
3  DDD      0
4  EEE      2
5  FFF      1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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