我的数据框看起来像-
WIT_ID ML_ENTITY_TYPE ML_ENTITY_NAME EDT_ENTITY_NAME USER_ACTION IS_MAIN
17668620 RBNAME MANGO NaN 3 0
17668620 RBNAME BANANA NaN 3 0
17668620 DRWECNTRY SINGAPORE NaN 3 0
17668620 TRNSPVESSEL DUMMY NaN 3 0
我想将列表类型的ML_ENTITY_NAME
组合为相同的WIT_ID
和相同的ML_ENTITY_TYPE
,EDT_ENTITY_NAME USER_ACTION IS_MAIN
在整个数据帧中都将保持相同。
WIT_ID ML_ENTITY_TYPE ML_ENTITY_NAME EDT_ENTITY_NAME USER_ACTION IS_MAIN
17668620 RBNAME [MANGO,BANANA] NaN 3 0
17668620 DRWECNTRY SINGAPORE NaN 3 0
17668620 TRNSPVESSEL DUMMY NaN 3 0
目前,我的方法类似于this
但是我无法为我的数据框正确应用该解决方案。
如果有人对这个查询有任何建议,答案或需要更多信息,请发表评论/答案。
答案 0 :(得分:1)
我发现this链接可能会有所帮助。基本上,您可能要寻找的线是
df.join(df.groupby(['WIT_ID','ML_ENTITY_TYPE'])['ML_ENTITY_NAME'].apply(list).to_frame('new_column'),on = ['WIT_ID','ML_ENTITY_TYPE'])
这将添加一个新列,其合并值为“ ML_ENTITY_TYPE”。
答案 1 :(得分:0)
如果按具有NaN
的列分组,则所有组都将排除在外,这将是一个问题。解决方案是将NaN
替换为temporay值,应用解决方案并替换回去:
如果按不包含ML_ENTITY_NAME
的所有列进行分组的解决方案:
df1 = (df.fillna('MISS')
.groupby(df.columns.difference(['ML_ENTITY_NAME']).tolist())['ML_ENTITY_NAME']
.agg(list)
.reset_index()
.reindex(columns=df.columns)
.replace('MISS', np.nan))
print (df1)
WIT_ID ML_ENTITY_TYPE ML_ENTITY_NAME EDT_ENTITY_NAME USER_ACTION \
0 17668620 DRWECNTRY [SINGAPORE] NaN 3
1 17668620 RBNAME [MANGO, BANANA] NaN 3
2 17668620 TRNSPVESSEL [DUMMY] NaN 3
IS_MAIN
0 0
1 0
2 0