![](/img/trans.png)
[英]Python Pandas: Counting how many times value from one data frame appears in another dataframe, filering on multiple conditions
[英]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
這是通過在df2
的value_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_counts
和reindex
解決方案, 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.