如何使用另一个数据帧列中的值填充panda数据帧列



首先,我们可以导入一些可能有用的包

import pandas as pd
import datetime

假设我现在有一个数据帧,它有一个日期、名称和年龄列。

df1 = pd.DataFrame({'date': ['10-04-2020', '04-07-2019', '12-05-2015' ], 'name': ['john', 'tim', 'sam'], 'age':[20, 22, 27]})

现在假设我有另一个数据帧,带有一些随机列

df2 = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})

问题:

如何获取在日期过滤的df1中的年龄值(可以选择此值(,并用此值填充df2中的全新列?理想情况下,此方法应适用于数据帧中的任意行数。

已尝试

以下是我尝试过的(在一个类似的例子中(,但由于某种原因,它似乎不起作用(它只是在大多数列条目中显示nan值,除了少数似乎随机填充的条目(。

y = datetime.datetime(2015, 5, 12)
df2['new'] = df1[(df1['date'] == y)].age

预期输出

由于我已经根据sams年龄在上面进行了筛选(日期对应于带有sams名称的行(,我希望将新列添加到df2中,并将他的年龄作为所有条目(在这种情况下,27重复3次(。

df2 = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6], 'new': [27, 27, 27]})

尝试:

y = datetime.datetime(2015, 5, 12).strftime('%d-%m-%Y')
df2.loc[:, 'new'] = df1.loc[df1['date'] == y, "age"].item()
# Output
a  b  new
0  1  4   27
1  2  5   27
2  3  6   27

您想将y的格式更改为Str,并尝试df.loc方法

y = datetime.datetime(2015, 5, 12)
y=y.strftime('%d-%m-%Y')
df2['new']=int(df1.loc[df1['date']==y,'age'].values)
df2

将df1date列转换为datetime类型

df1['date'] = pd.to_datetime(df1.date, format='%d-%m-%Y')

过滤数据帧并获取年龄

req_date = '2015-05-12'
age_for_date = df1.query('date == @req_date').age.iloc[0]

注:这假设每个日期只有一个年龄(如OP在评论中所解释的(

创建新列

df2 = df2.assign(new=age_for_date)

输出

a  b  new
0  1  4   27
1  2  5   27
2  3  6   27

最新更新