繁体   English   中英

如何在 pandas 中将多行合并为一行

[英]how to combine multiple rows to one row in pandas

我有一个 dataframe 具有多行同名但具有不同属性的行,我想将这些行组合成单行进行数据分析

现有数据框:

import pandas as pd
d = {'name' : ['ZEE', 'ZEE', 'ZEE', 'ZEE', 'ZEE'], 
     'A': ['A1','','','',''],
     'B': ['','B1','','',''],
     'C': ['','','','',''],
     'D': ['','','','D1',''],
     'E': ['','','','','E1'],
    }
df = pd.DataFrame(data=d)

o= {'name' : ['ZEE'], 'A': ['A1'],'B': ['B1'],'C': [''],'D': ['D1'],'E': ['E1']}
o = pd.DataFrame(data=o)
o

输入:

姓名 一个 C D
A1
B1
D1
E1

Output:

姓名 一个 C D
A1 B1 D1 E1

这只是groupby()的一个简单案例。 将空字符串转换为 NaN 很重要

d = {'name' : ['ZEE', 'ZEE', 'ZEE', 'ZEE', 'ZEE'], 
     'A': ['A1','','','',''],
     'B': ['','B1','','',''],
     'C': ['','','','',''],
     'D': ['','','','D1',''],
     'E': ['','','','','E1'],
    }
df = pd.DataFrame(data=d)
df.replace({"":np.nan}).groupby("name").first().reset_index()

我不完全确定这是否适合您在任何用例中的目的,但df.groupby("name").sum()应该提供您正在寻找的 output 。

只要您确定每列中的值永远不会超过一个,那么您可以使用 Panda 的 groupby 方法的“max”聚合器。 如果这些是字符串,这将返回具有最多字符的字符串。 在您的情况下,这很好,因为len('A1') > len('') 如果您使用整数,它将返回最大值。 由于您有字符串,并且每列只有一个非空条目,这应该没问题。

df = pd.DataFrame{
    'name' : ['ZEE', 'ZEE', 'ZEE', 'ZEE', 'ZEE'],
    'A': ['A1','','','',''],
    'B': ['','B1','','',''],
    'C': ['','','','',''],
    'D': ['','','','D1',''],
    'E': ['','','','','E1'],
}

df.groupby('name').max()

结果是

       A   B C   D   E
name                  
ZEE   A1  B1    D1  E1

或者你可以用np.nan替换'',并使用回填NA,那么第一行就是目标。

df.replace('', np.nan).fillna(method='bfill').iloc[[0]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM