Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
318 views
in Technique[技术] by (71.8m points)

python - Creating a new column with numbers in Pandas to group with a column with existing numbers

Good day,

I have a column from a data frame here:

 A
 23
 10
 11 
 22

My objective is to create a new column and associate the numbers like this:

A     file_number
23        8
10        6
11        6
22        8

As seen above both numbers 22, 23 are associated with the number 8 and numbers 10 and 11 are associated with number 6. How can I create such a column? Thanks in advance

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I think need if need create new values by first value of number with map by dictionary:

print (df['A'].apply(type))
0    <class 'int'>
1    <class 'int'>
2    <class 'int'>
3    <class 'int'>
Name: A, dtype: object

df['new'] = (df['A'] // 10).map({1:6, 2:8})
print (df)
    A  new
0  23    8
1  10    6
2  11    6
3  22    8

Detail:

print ((df['A'] // 10))
0    2
1    1
2    1
3    2
Name: A, dtype: int64

Another solution works with strings:

df['new'] = df['A'].astype(str).str[0].map({'1':6, '2':8})

print (df['A'].apply(type))
0    <class 'str'>
1    <class 'str'>
2    <class 'str'>
3    <class 'str'>
Name: A, dtype: object

df['new'] = df['A'].str[0].map({'1':6, '2':8})

If need convert positive number to first numeric is possible use this solution converted to numpy/pandas:

df['new'] = df['A'] // 10 ** np.log10(df['A'].values).astype(int)

print (df)
        A  new
0       2    2
1   10000    1
2     110    1
3  220000    2

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...