【发布时间】:2022-01-25 20:31:42
【问题描述】:
我有一个这样的熊猫数据框:
id =[30,30,40,40,30,40,55,30]
month =[1,3,11,4,10,2,12,12]
average=[90,80,50,92,18,15,16,55]
sec =['id1','id1','id3','id4','id2','id2','id1','id1']
df = pd.DataFrame(list(zip(id,sec,month,average)),columns =['id','sec','month','Average'])
我们想再添加一列,以逗号分隔以下条件的月份
- 需要排除 id2 秒
- 平均低于 90
期望的输出
我尝试了下面的代码,但没有得到想要的输出
final=pd.DataFrame()
for i in set(sec):
if i !='id2': #Exclude id2
d2 =df[df['sec']==i]
d2=df[df['average']<90] # apply below 90 condition
d2=d2[['id','month']].groupby(['id'], as_index=False).agg(lambda x: ', '.join(sorted(set(x.astype(str))))) #comma seperated data
d2.rename(columns={'month':'problematic_month'},inplace=True)
d2['sec']=i
tab =df.merge(d2,on =['id','sec'], how ='inner')
final =final.append(tab)
else:
d2 =df[df['sec']==i]
d2['problematic_month']=np.NaN
final =final.append(d2)
请建议任何其他方式(不合并)以获得所需的输出
【问题讨论】:
-
能否请您添加数据框所需的输出?
-
你不想使用
merge吗?