Python pandas:根据来自另一个数据框的类别值创建新列

Python pandas: create new column based on category values from another dataframe

我有两个数据框:

现在,我想在 dfA 中创建一个新列,其中包含与正确的 timeID 相对应的正确 date 值。我怎样才能做到这一点?

这里有几行我的数据集,例如:

dfA = pd.DataFrame({'timeID': ['1', '2', '3','2','3','4'], 'temp': ['4.5', '5.1', '4.0','-2.3','3.9','-1.1']})
dfB = pd.DataFrame(pd.date_range('6/24/2013', periods=6, freq='10Min'))
seq = pd.Series(range(1, 7)).to_frame()
dfB = pd.concat([seq,dfB],axis=1)
dfB.columns = ['timeID','date']
dfB.set_index('timeID',inplace=True)
print(dfA)
print(dfB)

dfA 的输出是:

|    temp  timeID
+-----------------
| 0   4.5      1
| 1   5.1      2
| 2   4.0      3
| 3  -2.3      2
| 4   3.9      3
| 5  -1.1      4

dfB的输出是:

|                      date
| timeID                    
+----------------------------
| 1      2013-06-24 00:00:00
| 2      2013-06-24 00:10:00
| 3      2013-06-24 00:20:00
| 4      2013-06-24 00:30:00
| 5      2013-06-24 00:40:00
| 6      2013-06-24 00:50:00

试试这个:

dfNew = dfA.join(dfB, on='timeID')

首先,您需要确保 timeID 列在两个 DF 中的数据类型相同,然后您可以使用 map() 方法:

In [78]: dfA['date'] = dfA['timeID'].astype(dfB.index.dtype).map(dfB['date'])

In [79]: dfA
Out[79]:
   temp timeID                date
0   4.5      1 2013-06-24 00:00:00
1   5.1      2 2013-06-24 00:10:00
2   4.0      3 2013-06-24 00:20:00
3  -2.3      2 2013-06-24 00:10:00
4   3.9      3 2013-06-24 00:20:00
5  -1.1      4 2013-06-24 00:30:00

在较小的 DF 中转换 timeID dtype 也很有意义,因为它会更快(更有效),所以如果 dfB 更小,我会这样做:

In [82]: dfB.index = dfB.index.astype(str)

In [84]: dfA['date'] = dfA['timeID'].map(dfB['date'])

In [85]: dfA
Out[85]:
   temp timeID                date
0   4.5      1 2013-06-24 00:00:00
1   5.1      2 2013-06-24 00:10:00
2   4.0      3 2013-06-24 00:20:00
3  -2.3      2 2013-06-24 00:10:00
4   3.9      3 2013-06-24 00:20:00
5  -1.1      4 2013-06-24 00:30:00