当Pandas中的值和条目匹配时,如何计算键的计数?

2024-07-02 19:18:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有点复杂的聚合和旋转(我想),我不知道如何实现。 我有点像:

df1 = pd.DataFrame({'query':['A','test1: A','test2: A','test2: A','AB','test1: AB','test3: AB'],
                  'link':['url1','url1','url1','url1','url2','url3','url2']})
OUT:
       query   link
0          A   url1
1   test1: A   url1
2   test2: A   url1
3   test2: A   url1
4         AB   url2
5  test1: AB   url3
6  test3: AB  url2

我需要下面的东西。此表的目的是显示匹配查询值的URL的计数。例如,“test1:A”将“url1”作为“A”,因此计数为1;“test1:AB”与“url2”不匹配为“AB”,因此为0,以此类推

df2 = pd.DataFrame({'query': ['A','AB'],
                   'test1': [1,0],
                   'test2':[2,0],
                   'test3':[0,1]})
OUT:
  query  test1  test2  test3
0     A      1      2      0
1    AB      0      0      1

基本上,我只想计算值和链接匹配时键的计数。看到了this,但真的没有帮助

编辑:更改了链接值,因此链接和查询之间没有相似性


Tags: dataframeab链接linkoutquerypd计数
1条回答
网友
1楼 · 发布于 2024-07-02 19:18:01

我们必须做一些基本的整形和字符串提取,看看AB是否等于AB

我们可以采用的主要方法是str.containsstr.extractstr.split

s = df1['query'].str.split(':',expand=True).join(df1['link'])
s[1] = s[1].fillna(s[0])
s = s[s[0].str.contains('[^test\d+]')==False]

print(s)

       0    1   link
1  test1    A   urlA
2  test2    A   urlA
3  test2    A   urlA
5  test1   AB    url
6  test3   AB  urlAB

s['link'] = s['link'].str.extract('url(\w+)')

s['test'] = s[1].str.strip().eq(s['link']).astype(int)


pd.pivot_table(s,s['test'],s[1],s[0],aggfunc='sum').fillna(0)

     test            
0   test1 test2 test3
1                    
 A    1.0   2.0   0.0
 AB   0.0   0.0   1.0

相关问题 更多 >