2017-08-03 34 views
2

大家好,所以我有以下数据框:大熊猫保留数据而下跌的NaN

WM    WH   WP   LC_REF 
0 Tesla  League  Test   DT 17 1C 
1 Merc   Fandom  Tundra   DT 17 1C 
2 Fellaine  Fark   ''   DT 17 1C 
3 SeaWorld  ''   ''   DT 17 1C 
4 Rectigy   ''   ''   DT 17 1C 
5 Donfae   ''   ''   DT 17 1C 

我的代码是这样的:

for num in range(len(df)): 
    df = df.groupby('LC_REF',sort=False).agg(lambda x: ','.join(x.astype(str).str.upper()).replace(' ','')).stack().rename_axis(('LC_REF','a')).reset_index(name='vals') 

产生这样的:

LC_REF   a   vals 
0 DT 17 1C   WM   Tesla,Merc,Fellaine,Seaworld,Rectigy,Donfae 
1 DT 17 1C   WH   League, Fandom, Fark,,, 
2 DT 17 1C   WP   Test,Tundra,,,, 

有任何方式在最后删除额外的逗号?某处在我的代码,因为它是分组我想它砸空字符串值,所以它可以是这样的:

LC_REF   a   vals 
0 DT 17 1C   WM   Tesla,Merc,Fellaine,Seaworld,Rectigy,Donfae 
1 DT 17 1C   WH   League, Fandom, Fark 
2 DT 17 1C   WP   Test,Tundra 

回答

1

试试这个:

df.vals.apply(lambda x: x[:x.find(',,')]) 

这样你找到的第一个发生',,',并将文本置于',,'的位置。即使最后只有一个逗号,也可以工作。

+0

感谢您的回答!不幸的是,它似乎是切断了没有连续逗号的最后一行字母,所以第一行变成了特斯拉,Merc,Fellaine,海洋世界,Rectigy,Donfa,还有什么提示? – codeninja

+1

试试这个:df.vals.apply(lambda x:x [:x.find(',,')] if x.endswith(',')else x) –

+1

漂亮。感谢您的帮助! – codeninja