对具有混合数据类型的列中的数组进行重复数据删除 (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
我试图遵循奇怪的逻辑,我首先创建临时列来计算列中唯一项的数量,或者检查数组中的所有()项是否与第一个索引项匹配,但这些是都坏了感谢您的帮助!
如果您有兴趣将 zip 和 state 列中的列表更改为 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
我有一个包含字符串、数组和整数的混合列数据类型的数据框。所有的数组都是 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
我试图遵循奇怪的逻辑,我首先创建临时列来计算列中唯一项的数量,或者检查数组中的所有()项是否与第一个索引项匹配,但这些是都坏了感谢您的帮助!
如果您有兴趣将 zip 和 state 列中的列表更改为 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 |