假设我有一个带有一列first_name
(字符串)和另一个列name_variations
(数组)的数据框。如何在name_variations数组上执行列操作,以便可以删除数组中包含与first_name字段的值匹配的任何值?
例如,这是初始数据帧:
data = {'first_name': ['Robert',
'Richard',
'Joseph'],
'name_variations': [np.array(['Robert', 'Rob', 'Bob']),
np.array(['Rich', 'Richard', 'Rick']),
np.array(['Joe'])],
}
df = pd.DataFrame (data, columns = ['first_name','name_variations'])
这给出了这样的数据框:
first_name name_variations
0 Robert [Robert, Rob, Bob]
1 Richard [Rich, Richard, Rick]
2 Joseph [Joe]
我想对其进行转换,以便从name_variation的前两个值(基于first_name列)中删除Robert和Richard,但第三个值保持不变。
所需的输出:
first_name name_variations
0 Robert [Rob, Bob]
1 Richard [Rich, Rick]
2 Joseph [Joe]
在克里斯对原始问题的正确答案之后编辑问题。我应该在我的问题中提到我的数据框很大(一百万行),我想看看向量化的操作是否可行,而不是使用apply,这比较慢。
df['name_variations'] = df.apply(lambda row: [x for x in row['name_variations'] if x!= row['first_name']], axis=1)
要么
df = df.explode('name_variations')
df[df['first_name']!=df['name_variations']].groupby('first_name')['name_variations'].apply(list).reset_index()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句