Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多个数据帧-从宽到长_Python_Python 3.x_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python 多个数据帧-从宽到长

Python 多个数据帧-从宽到长,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,我有两个数据帧,如下所示 df1 = pd.DataFrame({'person_id': [11, 21, 31, 41, 51], 'date_1': ['12/30/1961', '05/29/1967', '02/03/1957', '7/27/1959', '01/13/1971'], 'date_2': ['07/23/2017','05/29/2017','02/03/2015',np.

我有两个数据帧,如下所示

df1 = pd.DataFrame({'person_id': [11, 21, 31, 41, 51],
                        'date_1': ['12/30/1961', '05/29/1967', '02/03/1957', '7/27/1959', '01/13/1971'],
                        'date_2': ['07/23/2017','05/29/2017','02/03/2015',np.nan,np.nan]})

df2 = pd.DataFrame({'person_id': [11,11,11,21,31],
                    'visit_id':['A1','A2','A3','B1','B2'],
                    'date_start': ['01/01/2012', '02/25/2017', '02/03/2015', '07/27/2016', '01/13/2011'],
                    'date_end': ['05/03/2012','05/29/2017','03/03/2015','08/15/2016','02/13/2011']})
我试过下面的方法我只需要长格式的日期列

df = pd.merge(df1, df2, on='person_id',how='outer')
df = pd.wide_to_long(df, stubnames=['date'], i='person_id', j='grp').sort_index(level=0)
df = df.reset_index(level=1, drop=True).reset_index()
df
但这给出了一个空的数据帧

我想获得每个主题的所有日期,如下所示(两个主题的样本输出)


这只是
熔化
浓缩

(pd.concat([df1.melt('person_id', value_name='dates'), 
            df2.melt('person_id',value_vars=['date_start','date_end'], value_name='dates')
          ])
   .drop('variable', axis=1)
   .sort_values('person_id')
)

当我键入
reset\u index
时,为什么我看到创建了
index
列而不是对索引重新编号我这样做了
(pd.concat([df1.melt([person\u id',value\u name='dates')、df2.melt([person\u id',value\u vars=[date\u start','date\u end',value\u name='dates'))))。drop('variable',axis=1)。排序\u值(代码)>代码> ReStEyindex(DROP=TRUE)不会创建<代码>索引< /代码>列。好的,所以当我们希望指定列名时,我们应该使用<代码> ValueXVARS < /代码>参数。