我有一个我无法解决的问题。让我们看看你是否可以帮助我。
我有这个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
我希望这一切都得到很好的解释。 谢谢
答案 0 :(得分:1)
我认为您需要首先按boolean indexing
0
列FOUR
列NAMES
,然后dict
列NAMES
列保留第一个值。然后转换为ONE
列df = 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