从pandas中的分组中分配值

时间:2016-12-02 11:19:33

标签: python pandas dataframe multiple-columns assign

我有一个我无法解决的问题。让我们看看你是否可以帮助我。

我有这个df:

 foreach (Control item in Controls.OfType<Control>().ToList())

假设我想按照名称对名称进行分组,一旦我这样做了,我想按最近完成的组分配col 1到col 2的值,遵循我必须分配值的条件col 1中的元素按名称在整个组中具有col 4中的第一个

这就是我得到的

df = pd.DataFrame(np.random.randint(0,3,size=(7, 4)),columns=['ONE', 'TWO', 'NAMES', 'FOUR'],index = fechas)
df['NAMES'] = ['Peter','Jon',' Mary','Mary','Peter','Peter','Mary']

我需要这样的事情:

            ONE  TWO  NAMES  FOUR
1970-01-01    0    0  Peter     0
1970-01-02    2    1    Jon     0
1970-01-03    1    0   Mary     0
1970-01-04    1    1   Mary     0
1970-01-05    0    2  Peter     1
1970-01-06    2    2  Peter     0
1970-01-07    0    0   Mary     1

我希望这一切都得到很好的解释。 谢谢

1 个答案:

答案 0 :(得分:1)

我认为您需要首先按boolean indexing 0FOURNAMES,然后dictNAMES列保留第一个值。然后转换为ONEdf = pd.DataFrame({ 'ONE': [0, 2, 1, 1, 0, 2, 0], 'TWO': [0, 1, 0, 1, 2, 2, 0], 'NAMES': ['Peter', 'Jon', 'Mary', 'Mary', 'Peter', 'Peter', 'Mary'], 'FOUR': [0, 0, 0, 0, 1, 0, 1]}) df = df[['ONE', 'TWO', 'NAMES', 'FOUR']] print (df) ONE TWO NAMES FOUR 0 0 0 Peter 0 1 2 1 Jon 0 2 1 0 Mary 0 3 1 1 Mary 0 4 0 2 Peter 1 5 2 2 Peter 0 6 0 0 Mary 1 作为键,print (df[df.FOUR == 0].drop_duplicates(['NAMES'])) ONE TWO NAMES FOUR 0 0 0 Peter 0 1 2 1 Jon 0 2 1 0 Mary 0 d = df[df.FOUR == 0].drop_duplicates(['NAMES']).set_index('NAMES')['ONE'].to_dict() print (d) {'Jon': 2, 'Mary': 1, 'Peter': 0} df.TWO = df.NAMES.map(d) print (df) ONE TWO NAMES FOUR 1970-01-01 0 0 Peter 0 1970-01-02 2 2 Jon 0 1970-01-03 1 1 Mary 0 1970-01-04 1 1 Mary 0 1970-01-05 0 0 Peter 1 1970-01-06 2 0 Peter 0 1970-01-07 0 1 Mary 1 作为值和drop_duplicates

providers:[AlertService, AuthenticationService]
login.component.ts