[英]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.