问题: 尝试对下面的 Excel 数据数据框进行排序(请注意,这是一个多行的小样本集,其信息范围可以从 A#-Z# 后跟 AA# 等,(就像 Excel 工作表的完成方式一样)(#-范围从 0 到 100):
输入
"Pin No": ['J11', 'J1', 'A2', 'A11', 'A1', 'AA2', 'AB2'],
"Pin Name": ['pin1', 'pin2', 'pin3', 'pin4', 'pin5', 'pin6', 'pin7']
输出要求:
Pin No Pin Name
A1 pin5
A2 pin3
A11 pin4
J1 pin2
J11 pin1
AA2 pin6
AB2 pin7
尝试的代码:
import pandas as pd
import re
# Initial DataFrame
def main():
df = pd.DataFrame({
"Pin No": ['J11', 'J1', 'A2', 'A11', 'A1', 'AA2', 'AB2'],
"Pin Name": ['pin1', 'pin2', 'pin3', 'pin4', 'pin5', 'pin6', 'pin7']
})
# Apply the split_pin function to the 'Pin No' column
df['Pin No Split'] = df['Pin No'].apply(split_pin)
# Sort based on alphabetic part first, then numeric part
df_sorted = df.sort_values(by=['Pin No Split'], key=lambda x: x.apply(lambda y: (y[0], y[1]))).drop(columns=['Pin No Split']).reset_index(drop=True)
# Display the sorted DataFrame
print(df_sorted)
# Function to split Pin No into alphabetic and numeric components
def split_pin(pin):
# Regex to split Pin No into alphabetic and numeric parts
match = re.match(r"([A-Za-z]+)(\d+)", pin)
print(match)
if match:
alphabetic_part = match.group(1)
print(alphabetic_part)
numeric_part = int(match.group(2)) # Convert numeric part to integer for sorting
print(numeric_part)
return (alphabetic_part, numeric_part)
else:
return (pin, 0)
但是我无法正确排序。我得到以下输出,不确定我的方法的哪一部分是错误的:
Pin No Pin Name
0 A1 pin5
1 A2 pin3
2 A11 pin4
3 AA2 pin6
4 AB2 pin7
5 J1 pin2
6 J11 pin
বাংলাদেশেরকৃষি বাংলাদেশকৃষিপ্রধানদেশ। এদেশে শতকরা ৭৫ ভাগ লোক গ্রামে বাস করে। বাংলাদেশের গ্রাম এলাকায় ৫৯.৮৪% লোকের এবং শহর এলাকায় ১০.৮১% লোকের কৃষিখামার রয়েছে। মোট দেশজ উৎপাদন তথা জিডিপিতে কৃষিখাতের অবদান অবদান ১৯.১% এবং কৃষিখাতের মাধ্যমে ৪৮.১% মানুষের কর্মসং স্থানতৈরিহচ্ছে। ধান,পাট,তুলা,আখ,ফুলফুলরেশমগুটির,মাছ,সবজি,সবজি,পশুসম্পদ,মাটির,মাটির,বীজ,বীজ,বীজবীজউন্নয়নবিতরণবিতরণইত্যাদিইত্যাদিএএদেশেরকৃষি 了解更多