0
我已经从sql server中提取了一些熊猫格式的数据。像这样的结构:熊猫:批量替换来自不同行的值符合相同条件
df = pd.DataFrame({'Day':(1,2,3,4,1,2,3,4),'State':('A','A','A','A','B','B','B','B'),'Direction':('N','S','N','S','N','S','N','S'),'values':(12,34,22,37,14,16,23,43)})
>>> df
Day Direction State values
0 1 N A 12
1 2 S A 34
2 3 N A 22
3 4 S A 37
4 1 N B 14
5 2 S B 16
6 3 N B 23
7 4 S B 43
现在我想(A国==)本身来代替与同一天同一个方向,但所有值+值与同一天,同一个国家,但与(国家==乙)。例如,像这样:
df.loc[(df.Day == 1) & (df.Direction == 'N') & (df.State == 'A'),'values'] = df.loc[(df.Day == 1) & (df.Direction == 'N') & (df.State == 'A'),'values'].values + df.loc[(df.Day == 1) & (df.Direction == 'N') & (df.State == 'B'),'values'].values
>>> df
Day Direction State values
0 1 N A 26
1 2 S A 34
2 3 N A 22
3 4 S A 37
4 1 N B 14
5 2 S B 16
6 3 N B 23
7 4 S B 43
通知的第一行的值已经从12变更为26(12 + 14) 由于值是来自不同的行,所以种难以使用combine_first功能?
现在我必须使用两个循环(在'日'和'方向')和上述归因语句来做,当数据帧变大时它非常缓慢。你有这样做的聪明和有效的方式吗?
哦,groupby和apply:可爱的funcs队友。作为一个新手,他们总能感觉棒极了,但仍需要更多的培训来掌握他们。很多谢谢,伙计 – lkonweb
不用担心。如果您觉得有用,请接受答案。 – Allen