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

标签 python pandas dataframe categories

我有两个数据框:

  • dfA,包含数千行温度数据。每个温度值都链接到从不同对象测量的 timeID 值(1, 2, 3, ..., n),因此存在重复的时间 ID
  • dfB 包含标识每个时间 ID 的标签。这些标签是正确的日期/时间 (date) 值

现在,我想在 dfA 中创建一个新列,其中包含与正确 timeID 相对应的正确日期值。我怎样才能实现这个目标?

以下是我拥有的几行数据集,作为示例:

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

最佳答案

首先,您需要确保两个 DF 中的 timeID 列具有相同的数据类型,然后您可以使用 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

timeID dtype 转换为较小的 DF 也是有意义的,因为它会更快(更有效),所以如果 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

关于Python Pandas : create new column based on category values from another dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38784330/

相关文章:

python - 将 XML 文档导入 Django (postgres) 数据库

python - Pandas:将具有多个范围的值转换为行

python - 获取 Pandas 中 3 个月的平滑移动组的总和数据

python - Pandas groupby 和聚合输出应包括所有原始列(包括未聚合的列)

r - 查找唯一行

python - heapq 推送比较如何在 2.7 和 3.x 中工作

python - 对象生成器模式

python 锁方法注解

python - Seaborn 中的 FacetGrid 数据标签

python - pandas.DataFrame 中一列的反向累积总和