首页 > 解决方案 > 使用具有不同值的新列复制 DataFrame

问题描述

我有一个熊猫数据框。

import pandas as pd
import numpy as np
from datetime import datetime

d = {'account_id': [1, 2], 'type': ['a', 'b']}
df = pd.DataFrame(data=d)
帐户ID 类型
0 1 一种
1 2 b

我想添加两列include_imagesdata_since其中应该包含原始DataFrame的每一行的一个时间True和一个日期,以及原始DataFrame的每一行的一个时间False和一个日期NaN

有没有更有效的方法来写这个然后像这样:

df_a = df.copy()
df_a['include_images'] = True
df_a['data_since'] = datetime(2018, 1, 1)

df_b = df.copy()
df_b['include_images'] = False
df_b['data_since'] = np.nan

df = pd.concat([df_a, df_b], ignore_index=True)
帐户ID 类型 包含图像 data_since
0 1 一种 真的 2018-01-01 00:00:00
1 2 b 真的 2018-01-01 00:00:00
2 1 一种 错误的 钠盐
3 2 b 错误的 钠盐

标签: pythonpandas

解决方案


尝试assign即时创建副本:

const_date = pd.Timestamp('2018-01-01')

out = pd.concat([df.assign(include_img=True, data_since=const_date),
                 df.assign(include_img=False, data_since=pd.NaT)],
                ignore_index=True)

输出:

   account_id type  include_img data_since
0           1    a         True 2018-01-01
1           2    b         True 2018-01-01
2           1    a        False        NaT
3           2    b        False        NaT

推荐阅读