python - 使用 Pandas 在数据框中组合两行的不同部分
问题描述
我有一个大的(> 10000 行)数据框,如下所示,我必须通过col_1、col_2、col_3组 a和col_4、col_5组b或组 c组合具有相同名称的行(b & c不会同时存在)。
我可以在网上找到如何组合(加起来)行的每一列,而不是放在不同的部分。
原始数据框
姓名 | 团体 | col_1 | col_2 | col_3 | col_4 | col_5 |
---|---|---|---|---|---|---|
安 | 一种 | 1 | 钠 | 2 | 3 | 钠 |
安 | b | 1 | 钠 | 钠 | 2 | 3 |
本 | 一种 | 0 | 1 | 2 | 1 | 钠 |
本 | C | 0 | 钠 | 钠 | 3 | 钠 |
猫 | 一种 | 2 | 3 | 钠 | 钠 | 钠 |
期望的结果
姓名 | col_1 | col_2 | col_3 | col_4 | col_5 |
---|---|---|---|---|---|
安 | 1 | 钠 | 2 | 2 | 3 |
本 | 0 | 1 | 2 | 3 | 钠 |
猫 | 2 | 3 | 钠 | 钠 | 钠 |
解决方案
有点特别的方法,但是您可以这样做的一种方法是按名称和组对数据框进行排序,然后将您的数据框df
分成两部分(即 col1/2/3 用于组 a),执行 agroupby
并first()
使用第一个df
和last()
第二个,然后使用concat
:
import pandas as pd
df.sort_values(['name','group'],ascending=True,inplace=True)
one = df.iloc[:,:5]
two = pd.concat([df.iloc[:,:2],df[['col_4','col_5']]],axis=1)
def my_func(df1,df2,col):
return pd.concat([df1.groupby(col).first(),
df2.groupby(col).last()],
axis=1).drop('group',axis=1)
res = my_func(one,two,'name')
哪个打印:
print(res)
col_1 col_2 col_3 col_4 col_5
name
ann 1 NaN 2.00 2.00 3.00
ben 0 1.00 2.00 3.00 NaN
cat 2 3.00 NaN NaN NaN
如果我没记错的话,这可以满足您的需求。
推荐阅读
- reactjs - 垂直 FlatList 内水平 FlatList 的动态高度
- python - Python检查变量是否高于上次循环
- three.js - 加载纹理中的工件 - 三个 js
- android - Android+mysql:连接类返回一个Null对象
- react-grid-layout - 如何在 React-Grid-Layout 中实现静态大小的网格,如 3x3
- docker - Docker卷启动后一直退出
- raspberry-pi - Raspberry Pi 3 在尝试更新 64GB 卡时返回输入/输出错误并导致系统崩溃
- string - print(f"...:")-statement too long - 把它分成多行而不弄乱格式
- svg - *响应式*带有油漆填充的 SVG 图形
- r - 并排分组的条形图