【发布时间】:2021-07-25 17:17:24
【问题描述】:
我有 50000 行的 Pandas 列,一开始它看起来像这样(每一行都是单独的行):
'JavaScript, Python, Ruby'
'Java, PHP, Python'
'Matlab, Python, R'
''
'Matlab, Python'
'C#, JavaScript'
'Objective-C, Swift'
'R, SQL'
'C, C++, Java'
'Java, JavaScript, Ruby'
'C, C++'
'JavaScript, VB.NET'
'C, JavaScript'
'Perl, Python'
'C#, JavaScript, SQL'
'Java'
'PHP, SQL'
'Java, Scala'
'Java, JavaScript, Objective-C'
'JavaScript, Python'
'C#, Java'
'JavaScript'
'C'
'C#, JavaScript, Matlab'
'C#, Java, JavaScript'
我得到了大约 900 个独特的结果,但例如 'C#, Java, JavaScript' 和 'C#, JavaScript, Java' 对我来说是相同的(顺序无关紧要)。
我试图简化这一点,但我编写了不起作用的代码:
def String_compare(x):
for i in range(0, len(df) - 1):
while i < (len(df) - 1):
## the same lenght and content
if (set(x[i]) == set(x[i+1])):
## change content of the next row from the previous one
x[i+1] == x[i]
## replace() was used to avoid problem with NaN values
df['ITLanguages'] = df['ITLanguages'].replace(np.nan, '?').map(lambda x: String_compare(x))
如何比较一列中的所有值,如果它们具有相同的长度和内容(编程语言的名称),则将其更改为一个版本(例如:'a、b、c'、'a、c、b ' 和 'b, a, c' 是一样的,我都选择了 'a, b, c' 版本)。
【问题讨论】: