首页 > 解决方案 > Python pandas Dataframe 列到行操作

问题描述

我试图在保留其他列的同时转置几列。我很难使用数据透视码或转置码,因为它并没有真正给我所需的输出。

任何人都可以帮忙吗?

我有这个数据框:

企业标识 目标 第 1 周 第 2 周 第 3 周 第 4 周
1 556 54 33 24 54
2 342 32 32 56 43
3 534 43 65 64 21
4 244 45 87 5 22

我预期的数据框输出是:

企业标识 目标 实际的
1 556 第 1 周 54
1 556 第 2 周 33
1 556 第 3 周 24
1 556 第 4 周 54

依此类推,直到列出完整的员工 ID。

标签: pythonpandasdataframejupyter

解决方案


像这样的东西。

# Python - melt DF
import pandas as pd

d = {'Country Code': [1960, 1961, 1962, 1963, 1964, 1965, 1966],
'ABW':  [2.615300, 2.734390, 2.678430, 2.929920, 2.963250, 3.060540, 4.349760],
'AFG':  [0.249760, 0.218480, 0.210840, 0.217240, 0.211410, 0.209910, 0.671330],  
'ALB':  ['NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 1.12214]}
df = pd.DataFrame(data=d)

print(df)
df1 = (df.melt(['Country Code'], var_name='Year', value_name='Econometric_Metric')
        .sort_values(['Country Code','Year'])
        .reset_index(drop=True))
print(df1)

df2 = (df.set_index(['Country Code'])
        .stack(dropna=False)
        .reset_index(name='Econometric_Metric')
        .rename(columns={'level_1':'Year'}))
print(df2)


# BEFORE
       ABW      AFG      ALB  Country Code
0  2.61530  0.24976      NaN          1960
1  2.73439  0.21848      NaN          1961
2  2.67843  0.21084      NaN          1962
3  2.92992  0.21724      NaN          1963
4  2.96325  0.21141      NaN          1964
5  3.06054  0.20991      NaN          1965
6  4.34976  0.67133  1.12214          1966


# AFTER
    Country Code Year Econometric_Metric
0           1960  ABW             2.6153
1           1960  AFG            0.24976
2           1960  ALB                NaN
3           1961  ABW            2.73439
4           1961  AFG            0.21848
5           1961  ALB                NaN
6           1962  ABW            2.67843
7           1962  AFG            0.21084
8           1962  ALB                NaN
9           1963  ABW            2.92992
10          1963  AFG            0.21724
11          1963  ALB                NaN
12          1964  ABW            2.96325
13          1964  AFG            0.21141
14          1964  ALB                NaN
15          1965  ABW            3.06054
16          1965  AFG            0.20991
17          1965  ALB                NaN
18          1966  ABW            4.34976
19          1966  AFG            0.67133
20          1966  ALB            1.12214
    Country Code Year Econometric_Metric
0           1960  ABW             2.6153
1           1960  AFG            0.24976
2           1960  ALB                NaN
3           1961  ABW            2.73439
4           1961  AFG            0.21848
5           1961  ALB                NaN
6           1962  ABW            2.67843
7           1962  AFG            0.21084
8           1962  ALB                NaN
9           1963  ABW            2.92992
10          1963  AFG            0.21724
11          1963  ALB                NaN
12          1964  ABW            2.96325
13          1964  AFG            0.21141
14          1964  ALB                NaN
15          1965  ABW            3.06054
16          1965  AFG            0.20991
17          1965  ALB                NaN
18          1966  ABW            4.34976
19          1966  AFG            0.67133
20          1966  ALB            1.12214

另外,请查看下面的链接以获取更多信息。

https://www.dataindependent.com/pandas/pandas-melt/


推荐阅读