我有一个数据框架,列中有几个NaN值。“STAN”中的数据只需要匹配相关的“语句”。并且可以消除重复的“语句”值。
因此,我有以下数据框架:
Statement STAN-A STAN-B STAN-C STAN-D STAN-E STAN-F
0 Statement A AB.AM-1 ABC ABC 1 NaN NaN NaN NaN
1 Statement A AB.AM-1 NaN ABCDE 5 ABCDE.01 NaN NaN NaN
1 Statement A AB.AM-1 NaN ABCDE 5 ABCDE.02 NaN NaN NaN
2 Statement A AB.AM-1 NaN NaN ABC 62443-2-1:2009 4.2.3.4 NaN NaN
3 Statement A AB.AM-1 NaN NaN ABC 62443-3-3:2013 SR 7.8 NaN NaN
4 Statement A AB.AM-1 NaN NaN NaN ABC/ABC 27001:2013 A.8.1.1 NaN
4 Statement A AB.AM-1 NaN NaN NaN A.8.1.2 NaN
5 Statement A AB.AM-1 NaN NaN NaN NaN ABCD AB 800-53 Rev. 4 CM-8
5 Statement A AB.AM-1 NaN NaN NaN NaN PM-5
6 Statement B AB.AM-2 ABC ABC 2 NaN NaN NaN NaN
7 Statement B AB.AM-2 NaN ABCDE 5 ABCDE.01 NaN NaN NaN
7 Statement B AB.AM-2 NaN ABCDE 5 ABCDE.02 NaN NaN NaN
7 Statement B AB.AM-2 NaN ABCDE 5 ABCDE.05 NaN NaN NaN
8 Statement B AB.AM-2 NaN NaN ABC 62443-2-1:2009 4.2.3.4 NaN NaN
9 Statement B AB.AM-2 NaN NaN ABC 62443-3-3:2013 SR 7.8 NaN NaN
10 Statement B AB.AM-2 NaN NaN NaN ABC/ABC 27001:2013 A.8.1.1 NAN
11 Statement B AB.AM-2 NaN NaN NaN NAN ABCD AB 800-53 Rev. 5 CM-9我想把它变成这样:
Statement STAN-A STAN-B STAN-C STAN-D STAN-E STAN-F
0 Statement A AB.AM-1 ABC ABC 1 ABCDE 5 ABCDE.01 ABC 62443-2-1:2009 4.2.3.4 ABC/ABC 27001:2013 A.8.1.1 ABCD AB 800-53 Rev. 4 CM-8
1 Statement A AB.AM-1 NaN ABCDE 5 ABCDE.02 ABC 62443-3-3:2013 SR 7.8 A.8.1.2 PM-5
2 Statement A AB.AM-1 NaN NaN ABC 62443-2-1:2009 4.2.3.4 NaN NaN
3 Statement B AB.AM-2 ABC ABC 2 ABCDE 5 ABCDE.01 ABC 62443-2-1:2009 4.2.3.4 ABC/ABC 27001:2013 A.8.1.1 ABCD AB 800-53 Rev. 5 CM-9
4 Statement B AB.AM-2 NaN ABCDE 5 ABCDE.02 ABC 62443-3-3:2013 SR 7.8 NaN NaN
5 Statement B AB.AM-2 NaN ABCDE 5 ABCDE.05 NaN NaN NaN到目前为止,我已经尝试过df.dropna(),但是,当然,这使我没有任何价值。我还尝试了以下几种方法:
df.assign(**{'STAN-B': df['STAN-B'].join(df['STAN-B'].dropna())})但我明白:
AttributeError: 'Series' object has no attribute 'join'发布于 2021-09-09 23:03:42
尝试:
x = df.groupby("Statement").apply(lambda x: x.apply(sorted, key=pd.isna))
x = x.dropna(subset=x.loc[:, "STAN-B":].columns, how="all")
print(x.reset_index(drop=True))指纹:
Statement STAN-A STAN-B STAN-C STAN-D STAN-E STAN-F
0 Statement A AB.AM-1 ABC ABC 1 ABCDE 5 ABCDE.01 ABC 62443-2-1:2009 4.2.3.4 ABC/ABC 27001:2013 A.8.1.1 ABCD AB 800-53 Rev. 4 CM-8
1 Statement A AB.AM-1 NaN ABCDE 5 ABCDE.02 ABC 62443-3-3:2013 SR 7.8 A.8.1.2 PM-5
2 Statement B AB.AM-2 ABC ABC 2 ABCDE 5 ABCDE.01 ABC 62443-2-1:2009 4.2.3.4 ABC/ABC 27001:2013 A.8.1.1 ABCD AB 800-53 Rev. 5 CM-9
3 Statement B AB.AM-2 NaN ABCDE 5 ABCDE.02 ABC 62443-3-3:2013 SR 7.8 NaN NaN
4 Statement B AB.AM-2 NaN ABCDE 5 ABCDE.05 NaN NaN NaN注意:如果要使用pd.concat创建此数据,请尝试添加axis=1作为参数。
https://stackoverflow.com/questions/69125505
复制相似问题