繁体   English   中英

有没有一种方法可以融化数据框架,以便根据数据类型分别创建values列? (使用python)

[英]Is there a way to melt a data frame such that values columns are created separately on the basis of data type? (using python)

我有一个包含数百列的数据框,要通过融化将其表示为所需格式,这是不令人满意的。 melt函数将创建一个value列,并将该列的所有值附加到“ value_vars”参数,而与数据类型无关。 我正在尝试是否可以根据数据类型获取单独的值列。

我有的数据帧:

时间地点温度值1压力值2

2/4/2018英国A 3 C 2

3/4/2018英国C 4 D 6

4/4/2018英国B 6 A 1

5/4/2018英国D 8 A 4

预期产量:

时间地点参数源值

18/2/4/18英国温度A 3

3/4/18英国温度C 4

18/4/4英国温度B 6

18/5/4英国温度D 8

18/2/4/18英国压力C 2

3/4/18英国压力D 6

18/4/4 /英国压力A 1

18/5/4英国压力A 4

提前致谢。

使用DataFrame.select_dtypes按类型获取列,按stack DataFrame.select_dtypes ,并按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

前两个列之后选择配对和取消配对列的另一种解决方案:

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      8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM