python - pandas groupby.agg 列出行为
问题描述
有人可以帮助我了解这里发生了什么。
df = pd.DataFrame(columns=["ID", "alive", "Data"],
data=[
[154887124, True, "Data1"],
[154887124, True, "Data2"],
[159320850, True, "Data3"],
[159320850, True, "Data4"],
[159320849, True, "Data5"]
])
df = df.groupby(['ID','alive']).agg({'Data': lambda x: x.tolist()})
df
哪个输出:
Data
ID alive
----------------------------------
154887124 True [Data1, Data2]
159320849 True [Data5]
159320850 True [Data3, Data4]
我的目标是按 ID 和活动列分组,然后将数据列连接到一个列表中。上面的代码可以正常工作,但是由于某种原因,它会将“数据”列标题“向上”移动到其他 2 个列名称上方的一行。
从严格的外观角度来看,这很好,我可以毫无问题地引用数据列中的值,问题是我有一个完全相同格式的第二个数据框,只有“数据”列中的数据已经在列表中,我需要将它连接到它。但是,concat 语句与 2 个数据帧中的“数据”列不匹配,我能看到的唯一区别是第二个数据帧 ID、活动和数据都在标题中的同一“行”上。
为什么我的 groupby.agg 函数函数点他的数据帧?
更新
好的,这似乎是出于某种原因创建了一个 multiIndex,这似乎可以纠正它:
pd.DataFrame(df.to_records())
但是,我仍然很好奇为什么 groupby.agg 会创建这样的多索引?
解决方案
预计在默认情况下创建 groupbyindex
或MultiIndex
从内部的列创建后groupby
,为防止可能使用as_index=False
参数或.reset_index()
:
df1 = df.groupby(['ID','alive'], as_index=False).agg({'Data': lambda x: x.tolist()})
#alternative
df1 = df.groupby(['ID','alive']).agg({'Data': lambda x: x.tolist()}).reset_index()
或者可以简化您的解决方案:
df1 = df.groupby(['ID','alive'], as_index=False)['Data'].agg(list)
#alternative
df1 = df.groupby(['ID','alive'], as_index=False)['Data'].agg(list)
print (df1)
ID alive Data
0 154887124 True [Data1, Data2]
1 159320849 True [Data5]
2 159320850 True [Data3, Data4]
推荐阅读
- python - “1 个物理 GPU,0 个逻辑 GPU”当我训练模型时 GPU 不工作
- latex - BibTeX 你不能弹出一个空的文字堆栈
- python - How to open another window in and take user input in Pyqt5 Python
- cuda - 什么是 libcublasLt.so(不是 libcublas.so)?
- python - 如何使用 FastAPI + uvicorn 在工作人员之间共享数据库连接?
- python - 从 Flask 蓝图调用方法
- syntax-error - 错误:set_input_delay (Quartus) 中的语法错误
- c - MinGW中不包含Common Item Dialog接口?
- reactjs - 如何向 CRA WorkBox Precache 添加其他文件?
- c++ - 在桌面上创建一个文件。(C++)