查找含有整数和字符串
我有一个数据帧,其列A,B,C含有整数和字符串这样的混合物的数据帧的最小/最大值:查找含有整数和字符串
a | b | c
0.82 | 1.17 | 2.05
0.02 | ND | ND
2.00 | 1.08 | 0.02*
我需要找到最小/ max值,并将相应的值填入标题为“Min”/“Max”的新的第四/第五列,同时将ND视为最小值。我可以
df.loc[["a", "b", "c"]].min(axis=1)
#and max(axis=1)
在第一行的最低/最高值,并与
df.loc[((data["a"].isin(["ND"])) | (data["b"].isin(["ND"])) |
(data["c"].isin(["ND"])), "Min"] = "ND"
第二个工作,但不知道我应该做的第三排的0.02 *。我需要我填写了“民”栏目做了一个整数的比较,但保值,所以最终的结果会是什么样子
a | b | c | Min | Max
0.82 | 1.17 | 2.05 | 0.82 | 2.05
0.02 | ND | ND | ND | 0.02
2.00 | 1.08 | 0.02* | 0.02* | 2
我在我的整个数据帧与* 200值,以便手动更换不是一个选项。我考虑先删除*,但我不知道如何在必须填充最小/最大列时恢复它们。
如果任何人有解决此问题的任何建议,将不胜感激,谢谢。
看起来您需要对数据进行一些管理。一对夫妇的df.replace
电话应该这样做:
df = df.astype(str).replace('ND', np.nan)\
.replace('\*', '', regex=True).astype(float)
print(df)
a b c
0 0.82 1.17 2.05
1 0.02 NaN NaN
2 2.0 1.08 0.02
现在,应用max
和min
:
df['Max'] = df.max(1)
df['Min'] = df.min(1)
print(df)
a b c Max Min
0 0.82 1.17 2.05 2.05 0.82
1 0.02 NaN NaN 0.02 0.02
2 2.00 1.08 0.02 2.00 0.02
更新,根据您的约束:
dftemp = df.astype(str).replace('ND', -np.inf)\
.replace('\*', '', regex=True).astype(float)
df['Max'] = dftemp.max(1)
df['Min'] = dftemp.min(1).replace(-np.inf, 'ND')
print(df)
a b c Max Min
0 0.82 1.17 2.05 2.05 0.82
1 0.02 ND ND 0.02 ND
2 2.0 1.08 0.02* 2.00 0.02
不幸的是我不能使用这个方法,就像我原来的文章中指定的那样。我需要ND为最小值,并且需要将*保留在我的最大/最小列中。 –
用-np.inf而不是np.nan替换'ND'? – AK47
您可以保留*。但是在计算min-max时将其删除。 –
它看起来像在这些列中,您将按字典顺序比较字符串。 –