【发布时间】:2021-10-27 20:16:37
【问题描述】:
我有 DataFrame 'indata2'。以下代码允许我添加一个“指标”列,该列根据 Indata2['Label'] 对我的数据进行分组。
import pandas as pd
import numpy as np
indata2 = [[2, 'SIS X+', 9.65, 'Q'],
[2, 'SIS X-', 5.32, 'Q'],
[2, 'SIS Y+', 8.24, 'Q'],
[2, 'SIS Y-', 3.27, 'Q'],
[2, 'SIS', 3.40, 'Q'],
[2, 'C. VIV', 0.23, 'L'],
[2, 'SOBRE P', 0.38, 'SD'],
[2, 'SOBRE P', 0.19, 'SD'],
# [2, 'VIEN X+', 7.36, 'W'],
# [2, 'VIEN X-', 23.09, 'W'],
# [2, 'VIEN Y+', 6.66, 'W'],
# [2, 'VIEN Y-', 2.68, 'W'],
[4, 'SIS X+', 14.41, 'Q'],
[4, 'SIS X-', 12.23, 'Q'],
[4, 'SIS Y+', 10.00, 'Q'],
[4, 'SIS Y-', 11.00, 'Q'],
[4, 'C. VIV', 0.38, 'L'],
[4, 'C. VIV', 0.34, 'L'],
[4, 'C. VIV', 0.13, 'L'],
[4, 'SOBRE P', 0.62, 'SD']]
# [4, 'VIEN X+', 29.21, 'W'],
# [4, 'VIEN X-', 8.70, 'W'],
# [4, 'VIEN Y-', 7.46, 'W'],
# [4, 'VIEN Y+', 11.62, 'W'],
# [4, 'VIEN', 9.6, 'W']]
indata2 = pd.DataFrame(data = indata2, columns = ['KeyData', 'Text', 'AvgAbs', 'Label'])
l = indata2.Label.unique()
m = pd.DataFrame(l, columns = ['Label'])
m['Indicator'] = m.index + 1
outputdata = indata2.merge(m[['Indicator','Label']],'left')
mapper = {label: i+1 for i, label in enumerate(indata2["Label"].unique())}
indata2["Indicator"] = np.select([(indata2["Label"]=="Q")&(indata2["Text"].str.contains("X")),
(indata2["Label"]=="Q")&(indata2["Text"].str.contains("Y")),
(indata2["Label"]=="W")&(indata2["Text"].str.contains("X")),
(indata2["Label"]=="W")&(indata2["Text"].str.contains("Y")),
(indata2["Label"].isin(list("QW"))&~(indata2["Text"].str.contains("[X-Y]", regex=True)))
],
[mapper["Q"]+0.1, mapper["Q"]+0.2, mapper["W"]+0.1, mapper["W"]+0.2, 0],
indata2["Label"].map(mapper))
从 indata2['Label'] 列中,我有两个特殊标签:W 和 Q,它们根据 indata2['Label'] 和 indata2['Text'] 进行分组。
一切都很好,但是在 indata2['Label'] 中没有输入 Q、W 或两个标签的情况下会发生错误(这可能会发生,因为它们是数据)。发生这种情况时,我会遇到类型错误:键错误。
注意:代码的注释行适用于未输入 Q、W 或两个标签的情况,在这种情况下它会给我错误。但是当我取消注释它们时效果很好。
对于这种情况可以给出什么解决方案?问候。
【问题讨论】:
-
当一个或另一个标签不存在时,您希望发生什么?您是否希望它按另一个仍然>插入值?没有更具体的回应?您可以使用
if逻辑、try: except或其他检查,但如果您能解释得更清楚一点会有所帮助
标签: python python-3.x pandas numpy