我有一个带有多个 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
谢谢。
答案 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)
其中您可以定义任意多的列来堆叠,并提供您希望应用于最终结果的名称。