Python—如何从数据帧中的GROUPBY中获取所有可能的组合
我有一个4列的数据框。前三个柱只对我作为一组使用有用。我想获得1个员工编号/客户编号/日期的所有可能的事件编号组合。例如,在下图中: 这是我想要得到的输出: 请注意,对我来说,顺序并不重要,这意味着组合1234567与组合4567123相同。因此,如果有5例1234567和8例4567123,我只需要一行1234567和13 有什么想法吗?我还是Python的新手,有点困了 非常感谢:) 编辑: 此代码似乎正在运行:Python—如何从数据帧中的GROUPBY中获取所有可能的组合,python,pandas,pandas-groupby,itertools,Python,Pandas,Pandas Groupby,Itertools,我有一个4列的数据框。前三个柱只对我作为一组使用有用。我想获得1个员工编号/客户编号/日期的所有可能的事件编号组合。例如,在下图中: 这是我想要得到的输出: 请注意,对我来说,顺序并不重要,这意味着组合1234567与组合4567123相同。因此,如果有5例1234567和8例4567123,我只需要一行1234567和13 有什么想法吗?我还是Python的新手,有点困了 非常感谢:) 编辑: 此代码似乎正在运行: import pandas as pd import time from
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.read_csv
,添加参数separator=“,”
。尽管如此,请提供@Alper在前面的评论中询问的代码。您可以编辑以前的帖子。
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()