我拥有的数据框:
时间位置温度温度值1压力值2
2018年2月4日英国A A 3 3 C 2
3/4/2018英国C 4 4 D 6
4/4/2018英国B B 6 6 A 1
5/4/2018英国D D 8 8 A 4
预期输出:
时间地点参数参数来源值
2/4/18英国温度A 3 3
3/4/18英国温度温度C
44/4/18英国温度B 6 6
5/4/18英国英国温度D D 8 8
2/4/18英国压力C <2
3/4/18英国压力D D 6
4/4/18英国压力A(A)1
5/4/18英国压力A A 4
谢谢。
答案 0 :(得分:0)
使用DataFrame.select_dtypes
来获取类型的列,使用JSON.parse
进行整形并使用stack
进行连接:
concat
前两个列之后选择配对和取消配对列的另一种解决方案:
df = df.reset_index(drop=True)
df1 = df.set_index(['time','place'], append=True)
a = df1.select_dtypes(object).stack().rename('source').reset_index(level=3)
b = df1.select_dtypes(np.number).stack().rename('value').reset_index(level=3, drop=True)
df2 = (pd.concat([a, b], axis=1)
.reset_index(level=[1,2])
.rename(columns={'level_3':'parameter'})
.sort_values(['place','parameter'])
.reset_index(drop=True)
)
print (df2)
time place parameter source value
0 2/4/2018 U.K Pressure C 2
1 3/4/2018 U.K Pressure D 6
2 4/4/2018 U.K Pressure A 1
3 5/4/2018 U.K Pressure A 4
4 2/4/2018 U.K Temperature A 3
5 3/4/2018 U.K Temperature C 4
6 4/4/2018 U.K Temperature B 6
7 5/4/2018 U.K Temperature D 8