我是编码和Pandas的新手,我们将不胜感激。 我有一列希望重命名值位置A-00-UD,A-01-UD,A-02-UD =审核,T-00-UD,T-02-UD,T-03-UD =运输和所有其他值将=库存。我遇到的问题是将所有其他值都命名为Stock,因为完整数据框列中的行长为15,000行,并且有数百个我希望命名为Stock的不同位置。
位置
A-00-UD
A-01-UD
A-02-UD
A-03-UD
T-00-UD
T-01-UD
T-02-UD
T-03-UD
A-45-TR
S-30-RT
D-20-ED
V-00-LM
答案 0 :(得分:1)
您可以使用字典来映射Location
的第一个字符:
mapper = {'A': 'Audit', 'T': 'Transit'}
df['Location'] = df['Location'].str[0].map(mapper).fillna('Stock')
或者,使用numpy.select
,您可以指定条件,每个条件的值和默认值:
df = pd.DataFrame({'Location': ['A-00-UD', 'T-01-UD', 'S-30-RT']})
conditions = [df['Location'].str[0] == 'A', df['Location'].str[0] == 'T']
values = ['Audit', 'Transit']
df['Location'] = np.select(conditions, values, 'Stock')
print(df)
Location
0 Audit
1 Transit
2 Stock
答案 1 :(得分:0)
使用numpy.select
与isin
进行完全匹配:
m1 = df['Location'].isin(['A-00-UD', 'A-01-UD', 'A-02-UD'])
m2 = df['Location'].isin(['T-00-UD', 'T-02-UD', 'T-03-UD'])
或使用startswith
作为检查第一个值:
m1 = df['Location'].str.startswith('A')
m2 = df['Location'].str.startswith('T')
df['new'] = np.select([m1, m2], ['Audit', 'Transit'], default='Stock')
print (df)
Location new
0 A-00-UD Audit
1 A-01-UD Audit
2 A-02-UD Audit
3 A-03-UD Audit
4 T-00-UD Transit
5 T-01-UD Transit
6 T-02-UD Transit
7 T-03-UD Transit
8 A-45-TR Audit
9 S-30-RT Stock
10 D-20-ED Stock
11 V-00-LM Stock