我有一个有数百列的数据帧,要表示成我应用熔化所需的格式,这是不令人满意的。melt函数创建一个值列,并将该列的所有值附加给"value_vars“参数,而与数据类型无关。我正在尝试是否可以根据数据类型获得单独的值列。
我拥有的数据帧:
时间* value2 *
2018年2/4月2:00-11:00,U.K A、、3、3、3、7、7、3、3、3、8、7、7、7、7、7、8、8、6、8、8、6、5、6、6、5、6、6、6、6、8、8、8、8、8、8、8、8、8、6、8、8、6、8、6、6、6、6、6、6、8、6、6、6、6、6、8、6、6、11、11、11、11、11、11、11、11、11、11、11、11、11、6、6、6、6、6、6、6、6、6、6、6、6、6、6、6、6、6
2018年3/4财年3月4日,U.K C*6*
2018年4/4月4日,美国银行U.K B*1*1
2018年5月4日-5/4-11:00-11:00-11:00-6:00-4:00-4:00-4:00-4:00-6:00-4:00-4:00-6:00-6:00-4:00-6:00-6:00-6:00-6:00-6:00-6:00-4:00-4:00-4:00-6:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-4:00-3:00-4:00-4:00-3:00-4:00-4:00-4:00
预期输出:
时间、地点、地点、参数、来源、方法、价值
2/4/18年2月4日,日本: U.K 温度*3
3/4/18年3月4日,日本: U.K 温度*
4/4/18月4日:日本金融市场: U.K 温度:*6
5/4/18年5月4日,三星电子U.K 温度*8*
2/4/18年2:00:30:00:30:00:30:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:30:00:30:00:30:00:30:00:30:00:30:00:30:00:30:00:30:00:30:00:30:00:30:00:30:00:30:00-2:00:30:00-1:00-1:00-2:00-2:00-2:00-2:1-2:1-2:1-2:1-2:1-2:1-
3/4/18年3月4日,日本金融市场对U.K 的压力很大,日本金融市场的压力很大。
4/4/18* U.K 压力*
5/4/18* U.K 压力*
提前谢谢。
发布于 2019-06-11 19:56:49
将DataFrame.select_dtypes用于get columns types、reshape by stack和join by 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 8select pair和unpair列在前2个cols之后的另一个解决方案:
df = df.reset_index(drop=True)
df1 = df.set_index(['time','place'], append=True)
a = df1.iloc[:, ::2].stack().rename('source').reset_index(level=3)
b = df1.iloc[:, 1::2].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 8https://stackoverflow.com/questions/56542941
复制相似问题