1

我正在尝试做某种反向转置,其中 ID(ISIN) 变为重复,但特征“时期”定义了时间段,而价值特征从 3 个特征变为相同的特征。如何在 Python 中从 dfs 到 dfs2?

dfs = pd.DataFrame({
    'ISIN': [
        'A', 'B', 'C'

    ],
    'Std3y': [
        0.10, 0.11, 0.15

    ],
      'Std5y': [
        0.14, 0.10, 0.18

    ],
    'Std8y': [
        0.17, 0.19, 0.11

    ],


})

dfs




dfs2 = pd.DataFrame({
    'ISIN': [
        'A', 'A', 'A',
        'B', 'B', 'B',
        'C', 'C', 'C'
    ],
    'Period': [
        '3y', '5y', '8y',
        '3y', '5y', '8y',
        '3y', '5y', '8y'


    ],
      'Std': [
        0.10, 0.14, 0.17,
        0.11, 0.10, 0.19,
        0.15, 0.18, 0.11
        ]


})

dfs2
4

2 回答 2

1

您可以使用pd.melt“unpivot”您的数据框,然后使用字符串切片:

res = pd.melt(dfs, id_vars='ISIN', value_vars=dfs.columns[1:].tolist())
res['variable'] = res['variable'].str[3:]

print(res)

  ISIN variable  value
0    A       3y   0.10
1    B       3y   0.11
2    C       3y   0.15
3    A       5y   0.14
4    B       5y   0.10
5    C       5y   0.18
6    A       8y   0.17
7    B       8y   0.19
8    C       8y   0.11
于 2018-08-24T10:49:52.770 回答
0

通过和使用set_indexwith和unstack一些数据清理:swaplevelsort_indexreset_index

df = dfs.set_index('ISIN') 
df.columns = df.columns.str[3:]
df = (df.unstack()
        .swaplevel(0,1)
        .sort_index()
        .rename_axis(['ISIN','Period'])
        .reset_index(name='Std'))
print (df)
  ISIN Period   Std
0    A     3y  0.10
1    A     5y  0.14
2    A     8y  0.17
3    B     3y  0.11
4    B     5y  0.10
5    B     8y  0.19
6    C     3y  0.15
7    C     5y  0.18
8    C     8y  0.11
于 2018-08-24T10:50:45.950 回答