【问题标题】:python dataframe The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()python dataframe 一个Series的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
【发布时间】:2021-08-12 18:03:09
【问题描述】:

只有当两列的值不同时,我才需要从另一列向一列添加数据。

...
regex = "|".join(v)
contains_data = df[header].astype(str).str.replace(" ", "") \
                .str.lower().str.contains(regex.lower())
null_data = df[k].isna()
if len(df[contains_data & ~null_data]):
       print(df[[k, header]])

       df.loc[contains_data & ~null_data, k] = df[k] + "," + df[header] if df[k] != df[header] else df[k]

此过滤器df[contains_data & ~null_data] 输出以下数据:

         shipping_tag (k)   Shipping (header)
4        Free shipping      Free shipping

由于这是两个相同的值,我只想保留前一个。

但我收到此错误:

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

我该如何解决这个问题?

【问题讨论】:

  • df.loc[(contains_data) & (~null_data), k]我想是因为这个?

标签: python pandas dataframe


【解决方案1】:

实现所需的一种方法(在不相等的标头时更新 k)是为它定义一个函数:

def f(x):
     if x['k'] != x['header']: 
        return x['k'] + "," + x['header'] 
     else:
        return x['k']

然后在您想要的任何条件下将其应用于数据帧

df['k']=df.apply(lambda x : f(x), axis=1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 2021-02-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2021-09-09
    相关资源
    最近更新 更多