Python 如何修改数据帧中重复值的所有行
我有一个数据帧df,有大约250000行和大约50列。 列中有重复的值,如下所示(简化): 我尝试了以下代码:Python 如何修改数据帧中重复值的所有行,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,我有一个数据帧df,有大约250000行和大约50列。 列中有重复的值,如下所示(简化): 我尝试了以下代码: def myfunc(group): group['C'][group['C']==0]=group['B'][0] return group df=df.groupby('A').apply(myfunc) 这是可行的,但执行需要非常非常长的时间(~600秒)。 有什么改进的办法吗?另一种更高效的解决方案?您的输入与输出不太匹配(例如boris vs.max),但如
def myfunc(group):
group['C'][group['C']==0]=group['B'][0]
return group
df=df.groupby('A').apply(myfunc)
这是可行的,但执行需要非常非常长的时间(~600秒)。
有什么改进的办法吗?另一种更高效的解决方案?您的输入与输出不太匹配(例如boris vs.max),但如果我了解您的要求,您可以使用
.transform(“第一”)
:
这对我来说只需要几秒钟。您的“a”列的初始顺序是否如此重要?我想看看是否先执行
df=df.sort_值(by='A')
是一个大问题。否则,您的副本是否已经像示例中那样分组?或者你能说出类似于[john]、[john]、[notjohn]、[john]、[john]、[john]、[john]之类的词吗?“A”的首字母顺序并不重要。你可以按“A”对df进行排序。没关系,我已经想出了一个解决方案,但这比@DSM的转换选项更复杂、更长。你的解决方案非常有效。0,53秒对660秒,我以前的“解决方案”。这是一个伟大的改进!我需要探索和实验transform()方法。
'A' 'B' 'C'
jean 626 626
michel 950 950
john 382 382
john 356 382
max 315 315
clara 886 886
george 619 619
edmund 365 365
edmund 523 365
edmund 703 365
tony 416 416
edgard 108 108
tom 374 374
fanny 784 784
lucy 660 660
paul 728 728
rebecca 919 919
rebecca 131 919
roger 924 924
def myfunc(group):
group['C'][group['C']==0]=group['B'][0]
return group
df=df.groupby('A').apply(myfunc)
In [27]: df["C"] = df.groupby("A")["B"].transform("first")
In [28]: df.head(10)
Out[28]:
A B C
0 jean0 626 626
1 michel0 950 950
2 john0 382 382
3 john0 356 382
4 boris0 315 315
5 clara0 886 886
6 george0 619 619
7 edmund0 365 365
8 edmund0 523 365
9 edmund0 703 365
In [29]: len(df)
Out[29]: 249983