给定此dataframe:
import pandas as pd
a = pd.DataFrame({
'id': [1,2,3,4,5],
'company_id': [11,11,22,33,55],
'accSync': [True, False, False, False, True]
})
我需要基于accSync
字段对给定的company_id
修改所有行,这意味着,如果给定的company_id
的任何行都具有真实性,则该company_id
的所有行都需要更新为true。。
在这种情况下, company_id
11中有一个True
,因此第2行也应更新为2, 11, True
,而行1,3,4,5应保持不受影响。
我尝试使用groupby
和any
的组合,但没有到达任何地方。
iiuc transform
a.groupby('company_id')['accSync'].transform('max')
Out[131]:
0 True
1 True
2 False
3 False
4 True
Name: accSync, dtype: bool
分配回去
a['accSync']= a.groupby('company_id')['accSync'].transform('max')
def checker(df):
df["accSync"] = df["accSync"].any()
return df
new_df = a.groupby(by="company_id").apply(checker)
结果:
id company_id accSync
0 1 11 True
1 2 11 True
2 3 22 False
3 4 33 False
4 5 55 True