【问题标题】:How to convert format in Pandas [duplicate]如何在熊猫中转换格式[重复]
【发布时间】:2022-01-24 02:58:57
【问题描述】:

我有一个这样的 cvs 格式的数据文件:

StudentID  Math  Physics  Chemistry  History
001        80       90        95       98
002        99       85        90       70
003        77       80        95       90

我想要的格式是这样的:

StudentID  Math          Score
001        Math          80
001        Physics       90
001        Chemistry     95
001        History       98
002        Math          99
002        Physics       85
002        Chemistry     90
002        History       70
003        Math          77
003        Physics       80
003        Chemistry     95
003        History       90

如何在 Pandas 中进行这种格式转换?提前致谢。

【问题讨论】:

  • 你试过df.melt(id_vars='StudentID')吗?
  • 嘿@JonClements,感谢您的意见。我已经对这个问题发布了相同的答案。

标签: python pandas dataframe format data-conversion


【解决方案1】:

考虑到我正在重新创建您的 dataframe 并使用 pandas.melt

import pandas as pd
df = pd.DataFrame({"StudentID":['001','002','003'],
                   "Math":[80,99,77],
                   "Physics":[90,85,80],
                   "Chemistry":[95,90,95],
                   "History":[98,70,90]})

df1 = df.melt(id_vars=['StudentID'])

输出df1:

   StudentID   variable  value
0        001       Math     80
1        002       Math     99
2        003       Math     77
3        001    Physics     90
4        002    Physics     85
5        003    Physics     80
6        001  Chemistry     95
7        002  Chemistry     90
8        003  Chemistry     95
9        001    History     98
10       002    History     70
11       003    History     90

感谢 Jon Clements 的投入

【讨论】:

  • 非常感谢@Tamil!这是一个很大的帮助。
【解决方案2】:

试试我的方法....

import pandas as pd
d = {'ID': [0, 1, 2, 3], 'history': pd.Series([3, 4,5,6]), 'math': pd.Series([5, 6,7,8])}
df = pd.DataFrame(data=d)
print(df)

df2 = df
df.drop(['ID'],axis=1)
print(df)
columns = df.columns

df_results = pd.DataFrame()
for i in columns:
    df_temp = pd.DataFrame()
    df_temp['ID'] = df2['ID']
    df_temp['Course']= i
    df_temp['Score']= df2[i]
    df_results  = pd.concat([df_results,df_temp])
    
print(df_results)

【讨论】:

  • 谢谢@cnp!我确实尝试过你的方法。如果您将df2 = df 更改为df2 = df.copy(),将df.drop(['ID'],axis=1) 更改为df.drop(['ID'],axis=1, inplace=true),并像df_results.sort_values(by=['ID', inplace=True) 这样对df_results 进行排序,结果将是我要查找的结果。
  • 是的。这只是一个例子。你可以改变一些东西来达到你的目标。感谢您的分享。
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 2023-03-07
  • 2021-11-12
  • 2017-04-10
  • 2021-01-06
  • 1970-01-01
  • 2019-05-22
  • 2014-02-23
相关资源
最近更新 更多