![](/img/trans.png)
[英]All possible combinations of columns of a DataFrame - pandas / python
[英]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.