繁体   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