熊猫 str 包含最大值

时间:2021-03-16 07:33:56

标签: python pandas dataframe

我有 2 个数据帧,其中一个包含字符串,另一个包含时间戳和字符串。

df2= pd.DataFrame({'Name':['Tim', 'Timothy', 'Kistian', 'Kris cole','Ian'], 
        'Age':['1-2-1997', '21-3-1998', '19-6-2000', '18-4-1996','12-12-2001']})

df1= pd.DataFrame({'string':['Ti', 'Kri' ,'ian' ], 
            'MaxDate':[None, None, None]})

我想将 df2 上的 MaxDate 操作的最大日期分配给 str.contains(df1['string'][0] 列:

例如:df2[df2.Name.str.contains(df1['string'][0])] 给了我 2 条记录 example

我想将这些值中的最大值分配给与 'ti' 对应的 MaxDate

即第一次迭代的 o/p 将是:

df1= pd.DataFrame({'string':['Ti', 'Kri' ,'ian' ], 
                'MaxDate':['1-2-1997', None, None]})

如何使用循环对 df1 的所有条目执行此操作?

1 个答案:

答案 0 :(得分:1)

如果需要循环解决方案,使用 max 创建字典列表并传递给 DataFrame 构造函数:

df2['Age'] = pd.to_datetime(df2['Age'], dayfirst=True)

out = []
for x in df1['string']:
    m = df2.loc[df2.Name.str.contains(x), 'Age'].max()
    out.append({'string': x, 'MaxDate': m})
    
df = pd.DataFrame(out)
print (df)
  string    MaxDate
0     Ti 1998-03-21
1    Kri 1996-04-18
2    ian 2000-06-19