我有一个 pandas 数据框,其中包含两列中的字符串。 我想为每一列提取除数字之外的所有相似字符串,并添加新列,其中相似的文本与 idx 值进行交换。
从此:
Id Name1 Name2
0 Alpha 1 Bravo 3
1 Alpha 2 Alpha 2
2 Bravo 3 Alpha 1
对此:
Id Name1 Name2 NewCol1 NewCol2
0 Alpha 1 Bravo 3 1 2
1 Alpha 2 Zero 2 1 3
2 Bravo 3 Alpha 1 2 1
是否有一个简单的解决方案,无需大的迭代循环?
最佳答案
我认为需要使用 stack
的 MultiIndex
创建 Series
,删除数字
,对于类别使用 factorize
,最后unstack
和 join
原文:
s = df.set_index('Id').stack().str.replace('\d+', '')
df = df.join(pd.Series(pd.factorize(s)[0] + 1, index=s.index).unstack().add_prefix('New'))
print (df)
Id Name1 Name2 NewName1 NewName2
0 0 Alpha 1 Bravo 3 1 2
1 1 Alpha 2 Zero 2 1 3
2 2 Bravo 3 Alpha 1 2 1
详细信息:
print (s)
Id
0 Name1 Alpha
Name2 Bravo
1 Name1 Alpha
Name2 Zero
2 Name1 Bravo
Name2 Alpha
dtype: object
print (pd.factorize(s)[0] + 1)
[1 2 1 3 2 1]
关于python - pandas dataframe - 两列字符串匹配和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50811228/