将日期从一列添加到另一列

时间:2021-06-09 09:26:43

标签: python pandas dataframe date

我有一个带有多个 ID 的 Pandas 数据框,其他列我有两个日期列:“date1”和“date2”。我想将第二列中的日期添加到第一列。这必须在数据帧中的相同 ID 内完成。

我有什么:

ID   date1     date2       value
1    1/1/2013  5/1/2013    a
1    4/1/2013  16/1/2013   a
1    8/3/2014  31/12/2014  b
2    11/4/2013  15/5/2013  a
2    19/5/2016  18/1/2017  b
2    8/4/2017  18/5/2017   b

我想要的输出:

ID   date1      value
1    1/1/2013   a
1    5/1/2013   a
1    4/1/2013   a
1    16/1/2013  a
1    8/3/2014   b
1    31/12/2014 b
2    11/4/2013  a
2    15/5/2013  a
2    19/5/2016  b
2    18/1/2017  b
2    8/4/2017   b
2    18/5/2017  b

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以融化数据框:

df.melt(value_vars=['date1', 'date2'])

   variable       value
0     date1    1/1/2013
1     date1    4/1/2013
2     date1    8/3/2014
3     date1   11/4/2013
4     date1   19/5/2016
5     date1    8/4/2017
6     date2    5/1/2013
7     date2   16/1/2013
8     date2  31/12/2014
9     date2   15/5/2013
10    date2   18/1/2017
11    date2   18/5/2017

设置ID等:

df.rename(columns={'value': 'val'}).melt(id_vars=['ID', 'val'], value_vars=['date1', 'date2']).drop('variable', axis=1).set_index('ID')

ID
1     1/1/2013
1     4/1/2013
1     8/3/2014
2    11/4/2013
2    19/5/2016
2     8/4/2017
1     5/1/2013
1    16/1/2013
1   31/12/2014
2    15/5/2013
2    18/1/2017
2    18/5/2017

答案 1 :(得分:0)

本例中最直接的方法:

df.set_index('ID',inplace=True)

然后:

df2 = df.date1.append(df.date2).to_frame('date1')

这只会将两列堆叠在一起。

更一般地,如果您想要堆叠超过 2 列,您可以执行以下操作:

columns_to_stack = ['date1','date2']
final_name = 'date1'
df3 = pd.concat(
    df[column] for column in columns_to_stack
).to_frame(final_name)

其中您可以定义任意多的列来堆叠,并提供您希望应用于最终结果的名称。