[英]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.