将数据框从矩阵格式转换

huangapple go评论104阅读模式
英文:

Converting a dataframe from a matrix format

问题

我有一个看起来像这样的数据框:

  1. 1 2 3
  2. 1 1 4 2
  3. 2 4 1 8
  4. 3 2 8 1

我试图将其转换为以下格式的数据框:

  1. Comparison Value
  2. 1 v 1 1
  3. 1 v 2 4
  4. 1 v 3 2
  5. 2 v 3 8

可复现的数据框:

  1. {1: {1: 1.0, 2: 4, 3: 2}, 2: {1: 4, 2: 1.0, 3: 8}, 3: {1: 2, 2: 8, 3: 1.0}}
英文:

I have a dataframe that looks like this:

  1. 1 2 3
  2. 1 1 4 2
  3. 2 4 1 8
  4. 3 2 8 1

I am trying to convert it to a dataframe with this format:

  1. Comparison Value
  2. 1 v 1 1
  3. 1 v 2 4
  4. 1 v 3 2
  5. 2 v 3 8

Reproducible dataframe:

  1. {1: {1: 1.0, 2: 4, 3: 2}, 2: {1: 4, 2: 1.0, 3: 8}, 3: {1: 2, 2: 8, 3: 1.0}}

答案1

得分: 0

你可以这样做:

  1. import pandas as pd
  2. df = pd.DataFrame({1: {1: 1.0, 2: 4, 3: 2}, 2: {1: 4, 2: 1.0, 3: 8}, 3: {1: 2, 2: 8, 3: 1.0}})
  3. # 用于保存新的“矩阵”格式的字典
  4. matdata = {"Comparison": [], "Value": []}
  5. # 遍历行和列
  6. for i in range(1, 4):
  7. for j in range(1, 4):
  8. matdata["Comparison"].append(f"{i} v {j}")
  9. matdata["Value"].append(df.loc[i, j])
  10. newdf = pd.DataFrame(matdata)
  11. print(newdf)
  12. Comparison Value
  13. 0 1 v 1 1.0
  14. 1 1 v 2 4.0
  15. 2 1 v 3 2.0
  16. 3 2 v 1 4.0
  17. 4 2 v 2 1.0
  18. 5 2 v 3 8.0
  19. 6 3 v 1 2.0
  20. 7 3 v 2 8.0
  21. 8 3 v 3 1.0
英文:

You could do something like:

  1. import pandas as pd
  2. df = pd.DataFrame({1: {1: 1.0, 2: 4, 3: 2}, 2: {1: 4, 2: 1.0, 3: 8}, 3: {1: 2, 2: 8, 3: 1.0}})
  3. # dictionary to hold new "matrix" format
  4. matdata = {"Comparison": [], "Value": []}
  5. # loop over rows and columns
  6. for i in range(1, 4):
  7. for j in range(1, 4):
  8. matdata["Comparison"].append(f"{i} v {j}")
  9. matdata["Value"].append(df.loc[i, j])
  10. newdf = pd.DataFrame(matdata)
  11. print(newdf)
  12. Comparison Value
  13. 0 1 v 1 1.0
  14. 1 1 v 2 4.0
  15. 2 1 v 3 2.0
  16. 3 2 v 1 4.0
  17. 4 2 v 2 1.0
  18. 5 2 v 3 8.0
  19. 6 3 v 1 2.0
  20. 7 3 v 2 8.0
  21. 8 3 v 3 1.0

答案2

得分: 0

使用以下简单方法与pandas.DataFrame.at一起使用:

  1. pd.DataFrame([(f'{c} v {i}', df.at[i, c]) for c in df.columns for i in df.index],
  2. columns=['Comparison', 'Value'])

  1. Comparison Value
  2. 0 1 v 1 1.0
  3. 1 1 v 2 4.0
  4. 2 1 v 3 2.0
  5. 3 2 v 1 4.0
  6. 4 2 v 2 1.0
  7. 5 2 v 3 8.0
  8. 6 3 v 1 2.0
  9. 7 3 v 2 8.0
  10. 8 3 v 3 1.0
英文:

Use the following simple approach with pandas.DataFrame.at:

  1. pd.DataFrame([(f'{c} v {i}', df.at[i, c]) for c in df.columns for i in df.index],
  2. columns=['Comparison', 'Value'])

  1. Comparison Value
  2. 0 1 v 1 1.0
  3. 1 1 v 2 4.0
  4. 2 1 v 3 2.0
  5. 3 2 v 1 4.0
  6. 4 2 v 2 1.0
  7. 5 2 v 3 8.0
  8. 6 3 v 1 2.0
  9. 7 3 v 2 8.0
  10. 8 3 v 3 1.0

huangapple
  • 本文由 发表于 2023年7月27日 16:49:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/76778044.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定