python - Pandas groupby 折叠第一行组
问题描述
我有一个系统可以让我以这种格式的表格导出数据:</p>
data = {'record_id':[1,1,1,1,2,2,3,3,3],
'name':['AA',"","","",'BB',"",'CC',"",""],
'data':["",'foo1','foo2','foo3',"",'foo4',"",'foo5','foo6']}
df = pd.DataFrame(data)
print(df)
record_id name data
0 1 AA
1 1 foo1
2 1 foo2
3 1 foo3
4 2 BB
5 2 foo4
6 3 CC
7 3 foo5
8 3 foo6
其中有很多列,如“数据”,它们可以有任何不一定遵循模式的值。我需要将数据转换成这种格式:
data_out = {'name':['AA','AA','AA','BB','CC','CC'],'data':['foo1','foo2','foo3','foo4','foo5','foo6']}
df_out = pd.DataFrame(data_out)
print(df_out)
name data
0 AA foo1
1 AA foo2
2 AA foo3
3 BB foo4
4 CC foo5
5 CC foo6
我已经尝试阅读文档gropuby
并搜索类似问题,但我找不到将每组的第一 2 行折叠成 1 行的方法。
解决方案
使用df.replace
-
df = df.replace('', np.nan)
df['name'] = df['name'].ffill()
df = df.dropna(subset=['data'])
输出
record_id name data
1 1 AA foo1
2 1 AA foo2
3 1 AA foo3
5 2 BB foo4
7 3 CC foo5
8 3 CC foo6
您可以选择删除末尾record_id
带有 a 的列以获得所需的输出.drop()
df_out
推荐阅读
- python - 使用 Python Paramiko 读取远程 Windows 机器上的文件
- python - 如何“合并”我的主程序和 GUI?
- gherkin - 在 Gherkin 的行尾添加空格
- r - R-Lookup 匹配另一个数据框中的值,然后通过创建新变量将它们合并为原始值
- ssh - 如何在 openstack 实例关闭时发送电子邮件警报?
- r - 根据字符串拆分数据框
- java - Spring 测试 - 从测试类创建第一个 bean 并生成真实代码
- python - 如何使用 tf.py_function 将张量转换为映射函数内的 numpy 数组
- flutter - 是否有任何 Flutter 软件包可以启用阻止和解除阻止对所有设备应用程序的 Internet 访问的功能?
- pandas - 使用 groupby 的 Pandas 数据帧计数值高于阈值 - 代码优化