【发布时间】:2021-12-06 13:47:56
【问题描述】:
我有一个示例数据框,如下所示。
import pandas as pd
import numpy as np
NaN = np.nan
data = {'ID':['A', 'A', 'A', 'B','B','B'],
'Date':['2021-09-20 04:34:57', '2021-09-20 04:37:25', '2021-09-20 04:38:26', '2021-09-01
00:12:29','2021-09-01 11:20:58','2021-09-02 09:20:58'],
'Name':['xx','xx',NaN,'yy',NaN,NaN],
'Height':[174,174,NaN,160,NaN,NaN],
'Weight':[74,NaN,NaN,58,NaN,NaN],
'Gender':[NaN,'Male',NaN,NaN,'Female',NaN],
'Interests':[NaN,NaN,'Hiking,Sports',NaN,NaN,'Singing']}
df1 = pd.DataFrame(data)
df1
我想将同一日期的数据合并到一行中。 “日期”列采用时间戳格式。我已经为它写了一个代码。这是我的 TRY 代码:
试试:
df1['Date'] = pd.to_datetime(df1['Date'])
df_out = (df1.groupby(['ID', pd.Grouper(key='Date', freq='D')])
.agg(lambda x: ''.join(x.dropna().astype(str)))
.reset_index()
).replace('', np.nan)
这给出了一个输出,如果有多个相同值的条目,最终结果在同一行中有多个条目,如下所示。
获得的输出 但是,如果有多个条目,我不希望重复这些值。最终输出应如下图所示。
第一列不应有 'xx' 和 174.0 而不是 'xxxx' 和 '174.0 174.0'。
非常感谢任何帮助。谢谢。
【问题讨论】:
-
与
str.join聚合似乎不适用于许多列。如果您希望信息是静态的,只是在缺失方面有所不同,那么您应该将first用于姓名、年龄、体重、性别等列。但是,如果存在数据质量问题,您可能希望使用 modal 值来解决它。那么'Interests'将是您的唯一列','.join
标签: python pandas dataframe data-science data-processing