【问题标题】:pandas "map" the truth value of a dataframe is ambiguouspandas \"map\" 数据框的真值不明确
【发布时间】:2022-10-05 01:44:14
【问题描述】:

我在熊猫中有这个结果

     Antecedent Consequent  confidence       lift  support
0       (3623,)    (2568,)    0.829517  13.964925   0.0326
1       (4304,)    (4305,)    0.808362  24.348264   0.0232
2  (3623, 3970)    (2568,)    0.922581  15.531661   0.0286

和字典df

        key                                 name
0     1001                 Boombox Ipod Classic
1     1002               USB Office Mirror Ball

我试图通过添加来用字典解释先行词

resultsdf['Antecedent_name'] = resultsdf['Antecedent'].astype(str).map(df)

我收到错误

The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), `a.item(), a.any() or a.all().`

【问题讨论】:

  • 您想将另一个名为 'Antecedent_name' 的列添加到包含来自 df 的字典的 resultsdf 吗?
  • 是的,我想添加新列问题前件可以有两个值(3623、3970)所以新列应该是(名称,名称)

标签: python dictionary mapping


【解决方案1】:

在我看来,您正在尝试将 df 传递给 map。你应该通过一个字典。

尝试这个:

resultsdf['Antecedent_name'] = resultsdf['Antecedent'].astype(str).map(df.to_dict())

我不确定to_dict() 默认输出是否足够。您可以检查参数以更改输出格式here

更新:

考虑到 df1 您的主要 df 和 df2 您的 key:name df,您可以执行以下操作:

def check(x):
  lst = []
  for elem in x:
      if elem in df2.to_dict("list")["key"]:
          lst.append(df2.to_dict("list")["name"][df2.to_dict("list")["key"].index(elem)])
return tuple(lst)

 df1['Antecedent_name'] = df1['Antecedent'].map(check)

它不是那么漂亮,但我认为这很有效。也许您可以创建一个单独的函数而不是 lambda,然后

【讨论】:

  • 它起作用了它没有产生错误唯一的问题是我想添加新列问题前行可以有两个值(3623、3970)所以新列应该是(名称,名称)它产生了NAAN
  • 我用检查功能更新了答案。你能试试吗?
  • 感谢您的帮助相同的空最终结果()
【解决方案2】:

谢谢大家

resultsdf['Antecedent_name'] = resultsdf.Antecedent.map(lambda a: [df[int(id)] for id in a] )

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 2021-09-01
    • 2021-07-09
    • 2018-01-11
    • 1970-01-01
    • 2019-04-06
    • 2021-06-27
    • 2018-07-06
    • 1970-01-01
    相关资源
    最近更新 更多