我正在使用一个类似于下表的表:
ID NAME DIRECTION FOUND LOST
A Rock up 7 12
A Sap down 15 17
A Leaf up 18 19
B Sap up 5 9
B Leaf up 11 20
B Rock down 22 23
C Rock up 12 14
C Sap down 17 21 对于每个ID,我需要检查名称是Sap的位置,然后需要检查方向。如果Sap Direction = down,那么我需要反转该ID的方向值。理想的输出如下:
ID NAME DIRECTION FOUND LOST
A Rock down 7 12
A Sap up 15 17
A Leaf down 18 19
B Sap up 5 9
B Leaf up 11 20
B Rock down 22 23
C Rock down 12 14
C Sap up 17 21 我从group_by()方法开始,然后我想遍历这些组。我只能打印键和值对,但不能遍历它们。
for name,group in groups:
print(name, group)
('A', ID NAME DIRECTION FOUND LOST
0 A Rock + 7 12
1 A Sap - 15 17
2 A Leaf + 18 19)
('B', ID NAME DIRECTION FOUND LOST
3 B Sap + 5 9
4 B Leaf + 11 20
5 B Rock - 22 23)
('C', ID NAME DIRECTION FOUND LOST
6 C Rock + 12 14
7 C Sap - 17 21)发布于 2020-08-13 07:22:05
这是我做这项工作的方式:
s=set()
for i in range(len(df)):
if df.NAME[i]=='Sap' and df.DIRECTION[i]=='down':
s.add(df.ID[i])
for k in range(len(df)):
if df.ID[k] in s:
if df.DIRECTION[k]=='down':
df.DIRECTION[k]='up'
else:
df.DIRECTION[k]='down'发布于 2020-08-13 06:19:39
您可以在不分组的情况下实现这一点:
arr = df.loc[df['NAME'].str.contains('Sap') & df['DIRECTION'].eq('down'),'ID'].unique()
mask = df['ID'].isin(arr)
df.loc[mask, 'DIRECTION'] = df.loc[mask, 'DIRECTION'].replace(['up','down'],['down','up'])https://stackoverflow.com/questions/63385380
复制相似问题