按字母顺序排序单元格文本

3

我想更新 Pandas 数据帧中的一列,以按字母顺序重新排列字符串。例如,如果我有一个名为 "Number" 的列,其中包含:[123, 321, 456, 654],我希望对每个字符串条目按字母顺序进行排序,并将其添加为新列。

# List of Number 
numbers = [123, 321, 456, 654]
# Create a DataFrame object 
df = pd.DataFrame(numbers, columns =['Number'])

输出应该是:

enter image description here

我对Pandas和Python很菜,所以需要一步一步地分解并解释代码。

2个回答

1
你可以使用apply和自定义函数:
df['Number2'] = df['Number'].apply(lambda x: ''.join(sorted([num for num in str(x)])))

print(df)

   Number Number2
0     123     123
1     321     123
2     456     456
3     654     456

分解:

# Step 1: break the cells into a list of values
>>> df['Number'].apply(lambda x: [num for num in str(x)])

0    [1, 2, 3]
1    [3, 2, 1]
2    [4, 5, 6]
3    [6, 5, 4]

# Step 2: sort the values within a list
>>> df['Number'].apply(lambda x: sorted([num for num in str(x)]))

0    [1, 2, 3]
1    [1, 2, 3]
2    [4, 5, 6]
3    [4, 5, 6]

# Step 3: join the sorted values and convert to int (if necessary)
>>> df['Number'].apply(lambda x: ''.join(sorted([num for num in str(x)]))).astype(int)

0    123
1    123
2    456
3    456
Name: Number, dtype: int32

这也很完美地运行了。不幸的是,我对lambda或apply函数不太熟悉。你能解释一下它们在做什么吗? - Andybrute

1
你可以尝试。
df['Number2'] = df['Number'].astype(str).apply(sorted).str.join('')

print(df)

   Number Number2
0     123     123
1     321     123
2     456     456
3     654     456

谢谢。这个很完美地运作了。对我来说非常简单易懂。 - Andybrute
太棒了。这个完美地运行了。现在非常清晰明了。 - Andybrute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接