2017-02-15 39 views

回答

0

name列的情况下,由独特的价值观,

print df 

    name   address number 
0 Bob    bob No.56 
1 NaN  @gmail.com  NaN 
2 Carly [email protected] No.90 
3 Gorge  [email protected]  NaN 
4 NaN    .com  NaN 
5 NaN    NaN No.100 

df['name'] = df['name'].ffill() 
print df.fillna('').groupby(['name'], as_index=False).sum() 

    name   address number 
0 Bob [email protected] No.56 
1 Carly [email protected] No.90 
2 Gorge [email protected] No.100 

你可能需要ffill()bfill()[::-1].groupby('name').apply(lambda x: ' '.join(x['address']))strip()lstrip()rstrip()replace()种事情扩展上面的代码更复杂的数据。

0

如果要转换性行的数据帧(每列中可能有NaN条目),则可能没有直接的pandas方法。

你需要一些代码在name列赋值,使大熊猫能够知道bob的分离行和@gmail.com属于同一用户Bob

您可以使用fillnaffill方法填写第name列中的每个空条目,请参阅pandas dataframe missing data

df ['name'] = df['name'].ffill() 

# gives 
    name address number 
0 Bob bob No.56 
1 Bob @gmail.com 
2 Carly [email protected] No.90 
3 Gorge [email protected] 
4 Gorge .com  
5 Gorge  No.100 

然后你可以使用groupbysum作为聚合功能。

df.groupby(['name']).sum().reset_index() 

# gives 
    name address number 
0 Bob [email protected] No.56 
1 Carly [email protected] No.90 
2 Gorge [email protected] No.100 

您可能会发现NaN和空白有用之间的转换,见Replacing blank values (white space) with NaN in pandaspandas.DataFrame.fillna