如何在Python中解决这个“转置”?

2024-09-28 22:30:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着做一些反向转置,其中ID(ISIN)变成了重复的,但是特征'Period'定义了时间段,值特征从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

Tags: iddataframe定义特征periodpdstd时间段
2条回答

^{}^{}一起使用,并通过^{}^{}^{}进行一些数据清理:

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

您可以使用^{}来“取消分割”数据帧,然后使用字符串切片:

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

相关问题 更多 >