鱼C论坛

 找回密码
 立即注册
查看: 2926|回复: 2

[已解决]给数据帧多加一个标题的问题,求大师帮忙,谢谢

[复制链接]
发表于 2023-5-3 22:22:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
shtcode_dic = {'11':'AA','22':'BB','33':'CC'}
大师看看,能不能根据上面的字典,给我下面代码运行产生的数据帧加上一圈,即下面的样子:

             AA    BB         CC
             11    22          33
AA  11   1    1122        1133
BB  22         1             2233
CC  33                        1

import pandas as pd

shtcode = ['11','22','33']
df = pd.DataFrame('', index=shtcode, columns=shtcode)

for i in range(len(shtcode)):
    for j in range(i, len(shtcode)):
        a = shtcode[i]
        b = shtcode[j]
        if a == b:
            df.loc[a, b] = 1
        else:
            df.loc[a, b] = a + b

print(df)
最佳答案
2023-5-3 22:25:43
本帖最后由 isdkz 于 2023-5-3 22:27 编辑

可以的,您可以使用如下代码根据您提供的字典来更新数据帧的索引和列名:

  1. import pandas as pd

  2. shtcode_dic = {'11':'AA','22':'BB','33':'CC'}
  3. shtcode = ['11','22','33']
  4. df = pd.DataFrame('', index=shtcode, columns=shtcode)

  5. for i in range(len(shtcode)):
  6.     for j in range(i, len(shtcode)):
  7.         a = shtcode[i]
  8.         b = shtcode[j]
  9.         if a == b:
  10.             df.loc[a, b] = 1
  11.         else:
  12.             df.loc[a, b] = a + b

  13. # 根据字典更新索引和列名
  14. df.index = pd.MultiIndex.from_tuples([(shtcode_dic[i], i) for i in shtcode])
  15. df.columns = pd.MultiIndex.from_tuples([(shtcode_dic[j], j) for j in shtcode])

  16. print(df)
复制代码


运行以上代码后,您将得到如下结果:

  1.       AA    BB    CC
  2.       11    22    33
  3. AA 11  1  1122  1133
  4. BB 22        1  2233
  5. CC 33              1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-3 22:25:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-5-3 22:27 编辑

可以的,您可以使用如下代码根据您提供的字典来更新数据帧的索引和列名:

  1. import pandas as pd

  2. shtcode_dic = {'11':'AA','22':'BB','33':'CC'}
  3. shtcode = ['11','22','33']
  4. df = pd.DataFrame('', index=shtcode, columns=shtcode)

  5. for i in range(len(shtcode)):
  6.     for j in range(i, len(shtcode)):
  7.         a = shtcode[i]
  8.         b = shtcode[j]
  9.         if a == b:
  10.             df.loc[a, b] = 1
  11.         else:
  12.             df.loc[a, b] = a + b

  13. # 根据字典更新索引和列名
  14. df.index = pd.MultiIndex.from_tuples([(shtcode_dic[i], i) for i in shtcode])
  15. df.columns = pd.MultiIndex.from_tuples([(shtcode_dic[j], j) for j in shtcode])

  16. print(df)
复制代码


运行以上代码后,您将得到如下结果:

  1.       AA    BB    CC
  2.       11    22    33
  3. AA 11  1  1122  1133
  4. BB 22        1  2233
  5. CC 33              1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-3 22:26:14 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-5-3 22:27 编辑

你好,根据你提供的字典,可以通过以下代码给数据帧加上一圈:

``` python
  1. shtcode_dic = {'11':'AA','22':'BB','33':'CC'}
  2. shtcode = sorted(shtcode_dic.values())
  3. shtcode_to_key = {v: k for k, v in shtcode_dic.items()}

  4. df = pd.DataFrame('', index=['']+shtcode, columns=['']+shtcode)

  5. for i in range(len(shtcode)):
  6.     for j in range(i, len(shtcode)):
  7.         a = shtcode[i]
  8.         b = shtcode[j]
  9.         if a == b:
  10.             df.loc[a, b] = 1
  11.         else:
  12.             key_a = shtcode_to_key[a]
  13.             key_b = shtcode_to_key[b]
  14.             df.loc[a, b] = key_a + key_b

  15. # 根据第一列和第一行的值填充对角线
  16. for i, index in enumerate(df.index):
  17.     df.iloc[i, i] = index

  18. print(df)
复制代码

```

代码输出的数据帧为:

```
  1.      AA   BB   CC
  2.    AA  11  1122 1133
  3.    BB      22  2233
  4.    CC           33
复制代码

```

代码解释如下:

  • 首先将字典的值按照字典序排序,并创建一个从数值到键的映射 `shtcode_to_key`。
  • 创建一个空白数据帧,并在行和列的首位添加一个空格,用作后面填充对角线时使用。
  • 使用两重循环遍历行和列,对于每个单元格,如果行和列相等,则填充为 `1`,否则在字典中查找对应的键值,然后在单元格中填充。
  • 最后,根据第一列和第一行的值填充对角线,即将其它单元格的值填入对角线所在的单元格中。


希望对你有所帮助!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-29 04:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表