计算值并在新数据帧列中添加引用

时间:2013-10-13 12:31:00

标签: python pandas

我有一个数据框,其中包含某个列中某个值的多个外观。我想通过在新列中添加某种引用来设置这些值是唯一的。例如,假设我有一个带有ID列的数据框:

          ID
7     2035200584
8     2035200584
9     2035200584
31    2038128459
32    2038128459
33    2038128459
42    2053561908
43    2053561908
44    2053561908

我想创建一个新列,比如“newID”,它看起来像这样:

          ID
7     2035200584_1
8     2035200584_2
9     2035200584_3
31    2038128459_1
32    2038128459_2
33    2038128459_3
42    2053561908_1
43    2053561908_2
44    2053561908_3

我试图使用groupby机制,但没有成功。使用简单的应用机制是好的,但似乎有点麻烦(我需要保留一个字典,其中包含每个ID的外观计数器)

是否有一种简单有效的方法可以解决这个问题?

1 个答案:

答案 0 :(得分:3)

以下是DSM解决方案的略微变化:

import pandas as pd
import io

content = io.BytesIO('''index ID
7     2035200584
8     2035200584
9     2035200584
31    2038128459
32    2038128459
33    2038128459
42    2053561908
43    2053561908
44    2053561908''')

df = pd.read_table(content, sep='\s+', header=0)

df['ID'] = df.groupby('ID')['ID'].transform(
    lambda x: map('{:.0f}_{:.0f}'.format, x, x.rank('first')))

print(df)

产量

   index            ID
0      7  2035200584_1
1      8  2035200584_2
2      9  2035200584_3
3     31  2038128459_1
4     32  2038128459_2
5     33  2038128459_3
6     42  2053561908_1
7     43  2053561908_2
8     44  2053561908_3