对具有混合数据类型的列中的数组进行重复数据删除 (Python)

deduplicating arrays in columns with mixed data types (Python)

我有一个包含字符串、数组和整数的混合列数据类型的数据框。所有的数组都是 dtype=object.

>>> test = pd.DataFrame({'id': ['a','b','c', 'd'],
            'state': ['Arizona', np.array(['Texas', 'Texas', 'Texas']), 'Texas', np.array(['Texas', 'California'])],
            'zip': [91239, 21939, np.array([12941,13511]), np.array([11111, 11111, 11111])]})
    
>>> test
      id                  state                    zip
    0  a                Arizona                  91239
    1  b  [Texas, Texas, Texas]                  21939
    2  c                  Texas         [12941, 13511]
    3  d    [Texas, California]  [11111, 11111, 11111]

我想要的输出是对存在的数组进行重复数据删除,当数组中有多个不同的项目时,将其替换为 'Multiple'

的字符串
desired_output
  id     state       zip
0  a   Arizona     91239
1  b     Texas     21939
2  c     Texas  Multiple
3  d  Multiple     11111

我试图遵循奇怪的逻辑,我首先创建临时列来计算列中唯一项的数量,或者检查数组中的所有()项是否与第一个索引项匹配,但这些是都坏了感谢您的帮助!

如果您有兴趣将 zipstate 列中的列表更改为 Multiple,我建议您定义一个函数,并使用 pd.DataFrame.apply 将此函数应用于列。您可以使用以下代码:

def correctValue(value):
  if isinstance(value, (np.ndarray, list)):
    if len(value) > 1:
      if len(set(value)) == 1:
        return value[0]
      else:
        return "Multiple"
    elif len(value) == 1:
      return value[0]
  else:
    return value
test["zip"] = test["zip"].apply(correctValue)
test["state"] = test["state"].apply(correctValue)
test

输出

id state zip
0 a Arizona 91239
1 b Texas 21939
2 c Texas Multiple
3 d Multiple 11111