Python 熊猫用分类数据和大量nan值连接行/groupby
我试图通过基于2列连接行来简化数据帧。现在,剩下的有点混乱,有很多nan值等等。我将展示一个示例: 首字母:Python 熊猫用分类数据和大量nan值连接行/groupby,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我试图通过基于2列连接行来简化数据帧。现在,剩下的有点混乱,有很多nan值等等。我将展示一个示例: 首字母: Name Sex Shoes Bike Car 0 John Male Specialised 1 John Male Bridgestone 2 Lucy Female BMW 3 J
Name Sex Shoes Bike Car
0 John Male Specialised
1 John Male Bridgestone
2 Lucy Female BMW
3 John Male Vans
4 Lucy Female Nike
目标:
Name Sex Shoes Bike Car
0 John Male Vans Specialised, Bridgestone
1 Lucy Female Nike BMW
我应该使用什么功能?我不知道如何使用groupby和.agg(','.join)添加来完成此操作
(上面的数据只是示例性的——我必须处理的数据有更多的行,其中有许多相同名称的出现,以及大约20个“类别”列……还要注意,每一行应该只有一个“类别”中的字符串——鞋子/自行车/汽车等。)
提前谢谢 您可以使用空字符串
填充na
,然后在最后清除坏数据
正则表达式的顺序是非常重要的,您可以使用下面的组来使用它
df=pd.DataFrame([[John]、[Male]、[na]、[John]、[Male]、[na]、[Bridgestone]、[na]、[Lucy]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]、[na]
df=df.mask(df==“na”,“”)
df.groupby([“姓名”,“性别]).agg(lambda行:“,”。
联接([val for val in row if val.strip()!=“”])
假设空单元格为NaN(非空字符串),则将实现以下结果:
(df.set_index(['Name','Sex'])
.groupby(level=[0,1])
.apply(lambda x:x.apply(lambda y: ', '.join(y.dropna())))
.reset_index())
第二种方法
(df.set_index(['Name','Sex'])
.stack()
.groupby(level=[0,1,2])
.apply(', '.join)
.unstack()
.reset_index()
这个问题解决得很好,谢谢!你能解释一下嵌套lambda函数是如何工作的吗?我没办法想清楚。别担心:)@veterpargat第一次申请是在每个组上,数据框对应于John/Lucy。这里的x表示数据帧。在每个组中,我们使用了第二个apply,这是一个dataframeapply,它在每个列上应用一个函数。这里,我们将所有非空字符串连接到一列中。总之,我们按名称/性别拆分数据帧,并对每个数据帧应用(第一个)操作。然后在每个数据帧中,我们在每列上应用(第二个)函数
(df.set_index(['Name','Sex'])
.groupby(level=[0,1])
.apply(lambda x:x.apply(lambda y: ', '.join(y.dropna())))
.reset_index())
(df.set_index(['Name','Sex'])
.stack()
.groupby(level=[0,1,2])
.apply(', '.join)
.unstack()
.reset_index()