繁体   English   中英

Python - Pandas 如何在 dataframe 中从组中获取所有可能的组合

[英]Python - Pandas How to get all possible combinations from a group by in a dataframe

我有一个 4 列的 dataframe。 前 3 个列仅对我有用。 我想获取 1 个员工编号/客户编号/日期的所有可能的事件编号组合。 例如,在下面的照片中:

https://i.stack.imgur.com/5r3vQ.png

这是我想要得到的 output:

https://i.stack.imgur.com/JiroJ.png

请注意,对我来说顺序并不重要,这意味着组合 123,4567 与组合 4567,123 相同。 因此,如果假设有 5 例 123,4567 和 8 例 4567,123,我只想要 123,4567 和 13 的一行。

任何想法? 我对 Python 还是新手,有点卡住了!

非常感谢:)

编辑:

这段代码似乎有效:


import pandas as pd
import time
from collections import Counter
from itertools import chain, combinations

import sys
sys.path.append('C:/Config Python')
import config
import pyodbc  
import pandas as pd
import numpy as np

pd.options.display.max_colwidth = 150
  
#Build teradata connection function  
def td_connect(usr, pwd, DRIVER = 'XXX', DBCNAME = 'YYY'):  
    try:  
        conn_td = pyodbc.connect(DRIVER=DRIVER, DBCNAME=DBCNAME, UID=usr, PWD=pwd, autocommit = True)  
        return conn_td  
    except IOError as e:  
        print('I/O error !')   
        

          
#Give the query you wish to run           
sql = """ 

The code is here

"""  
  
#Put td login information  
conn = td_connect(usr=config.username,pwd=config.password)  
  
#get data  
df = pd.read_sql(sql, conn)  

df

gp = df.groupby(['Employee no', 'Client number', 'Date'])

d = dict()
for name, group in gp:
    l = group['Event Number'].to_list()    
    try:
        d[len(l)].append(l)
    except KeyError:
        d[len(l)] = [l]
d

meets = []
for i in d.keys():
    meets.append(Counter(chain.from_iterable(combinations(line, i) for line in d[i])))
    
print(meets)

灵感来自使用 Pandas groupby 连接多行的字符串

df['Combinations'] = df.groupby(['Employee no', 'Client number', 'Date'])['Event Number'].transform(lambda x: ",".join(x))
df['Counts'] = df.groupby(['Employee no', 'Client number', 'Date']).counts()['Event number'] 
result = df[['Employee no', 'Client number', 'Date', 'Combinations', 'Counts']].drop_duplicates()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM