python组或基于条件聚合DataFrame中的多个列

时间:2018-03-29 13:20:41

标签: python pandas

我正在尝试重写旧版转换脚本,并在许多场景中停留在聚合点。

例如: 我在SQL Server中有一个表如下:
userid dept groupname groupid
101 101所有用户1001
202 202新组2034
101 103管理员1020
101 105所有用户1001

在现有代码下方,每个用户只创建一个文档,并嵌入组和部门数据。

sqlCursor=pypyodbc.connect(sqlConnectionString).cursor()
mongodb=pymongo.MongoClient()
dbo=mongodb.database.collection

userDict=collections.OrderedDict()
sqlCursor.execute(''' select * from table ''')
tuples=sqlCursor.fetchall()
for tup in tuples:
 idi=tup.userid
 groups=userDict.get(idi,collections.OrderedDict()).get('groups', list())
 groups.append({'groupid':tup.groupid,'groupname':tup.groupname})
 dept=userDict.get(idi,collections.OrderedDict()).get('dept', list())
 dept.append(tup.dept)
 doc=collections.OrderedDict()
 doc['userid']=idi
 doc['groups']=groups
 doc['dept']=dept
 userDict['idi']=doc

dbo.insert_many(userDict.values())

对于重写,我们计划使用pandas库升级代码。我通过填充数据框如下所示取得了一些进展。

df=pandas.read_sql(''' SELECT * FROM TABLE ''',pypyodbc.connect(sqlConnectionString))

以下命令将整个数据帧转储到mongodb而不嵌入。

dbo.insert_many(df.fillna('NULL_DATA').to_dict('records'))

我尝试在熊猫中检查一些groupby的例子但是没有按我要求的方式工作。

如何使用pandas对记录进行分组并在mongodb中生成嵌入文档?

如果使用pandas库无法实现这一点,请告诉我。

1 个答案:

答案 0 :(得分:0)

不确定pymongo如何需要数据,但我认为你需要这样的东西:

(
    df.groupby("userid")
    .apply(lambda g: g.to_dict(orient="records").reset_index(name="groups"))
    .to_dict(orient="records")
)

我不了解您需要如何对depts进行分组,但您可以执行类似操作然后将其合并。