【问题标题】:isin() method in pandas ignoring the duplicate values. how can we prevent that?熊猫中的 isin() 方法忽略重复值。我们怎样才能防止这种情况发生?
【发布时间】:2019-08-01 16:59:13
【问题描述】:

我正在从无法在此处显示的数据框中获取所有值,但代码中提到的所有列名都存在于此数据框中。因为,我使用 isin() 方法从列中获取值。 isin() 方法不会给你重复的值,但我也想要重复的值。在上面的代码中,我展示了我如何使用 isin() 方法从多个列中获取多个值。在电压值变量中,我使用了 isin() 方法,该方法不获取重复值。我能做什么不删除重复值。

start_values = [1,2,3]
load_value_name = [f"^I__ND_LD({n})" for n in start_values]
load_values=df[df['I__ND_LD'].isin(load_value_name)]['I__ND_LD_Values'].values.astype(np.int)
print(load_values)
bus_names = [f"^I__BS_ND({n})" for n in load_values]
print(bus_names)
bus_values = df[df['I__BS_ND'].isin(bus_names)]['I__BS_ND_Values'].values.astype(np.int)
print(bus_values)
voltage_bus_value = [f"^VMEAS_BS({n})" for n in bus_values]
print(voltage_bus_value)
voltage_values = df[df['VMEAS_BS'].isin(voltage_bus_value)]['VMEAS_BS_Values'].reindex().values
print(voltage_values)

上面显示了对应的输出

load_values=[10 45 44]
bus_names=['^I__BS_ND(10)', '^I__BS_ND(45)', '^I__BS_ND(44)']
bus_values=[ 5 17 17]
voltage_bus_value=['^VMEAS_BS(5)', '^VMEAS_BS(17)', '^VMEAS_BS(17)']
voltage_values=[0.9908185  0.99612296]

我们可以看到“^VMEAS_BS(17)”出现了两次,但在数组中我只得到一个值,即 0.99612296,但我想要这个值两次。有什么可能的解决方案。

【问题讨论】:

  • 嗨。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。
  • 嗯,我的问题是我没有你的数据,所以无法测试你的解决方案。
  • 嗨,安莫尔。我现在正在检查。我不明白为什么你不应该得到所有的值,包括重复的。你有新的df还是和上次一样?
  • 啊,好的。我想我明白问题出在哪里了。是的, isin() 不起作用。让我想想办法……
  • 它和我们上次讨论的一样。非常感谢

标签: python pandas dataframe


【解决方案1】:

我的数据框中没有 VMEAS_BS,所以我将使用 load_values 向您展示结果。

这是我能想到的最快的:

替换

voltage_values = df[df['VMEAS_BS'].isin(voltage_bus_value)]['VMEAS_BS_Values'].reindex().values

所有这些行(对不起!!)

voltage_values = []
for _,value in enumerate(voltage_values):
  voltage_values.extend(df[df['VMEAS_BS'] == value]['VMEAS_BS_Values'].reindex().values)

这是一个带有 load_values 的示例

load_values = []
for _,value in enumerate(load_value_name):
  load_values.extend(df[df['I__ND_LD']== value]['I__ND_LD_Values'].values.astype(np.int))
#output
[10, 45, 44]

【讨论】:

  • 你需要做一个循环,因为你不能选择一行两次,当然。所以如果你想要它两次,你需要调用它两次。
  • stackoverflow.com/questions/57045169/… 这与您解决的问题相同,唯一的问题是使用 isin() 方法的重复值
  • 我们可以搬到聊天室吗?
  • 我不能聊天,因为我有 14 个声望,应该至少 20 个
  • 不,不可用。你使用Skype?根据评论,我只有 13 个声誉。至少需要 20 个。还需要 7 个?
猜你喜欢
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 2020-12-18
  • 1970-01-01
  • 2014-08-13
相关资源
最近更新 更多