转置数据框中除第一列以外的所有列
Transposing all but the first column in a dataframe
我得到了以下数据框
df = pd.DataFrame({'ISIN': ['A', 'B', 'C'],
'Jan': [40000, 50000, 42000],
'Feb': [40000, 50000, 42000],
'Mar': [40000, 50000, 42000]})
产生
ISIN Jan Feb Mar
0 A 40000 50000 42000
1 B 40000 50000 42000
2 C 40000 50000 42000
我正在尝试生成数据如下所示的输出:
Date A B C
0 Jan 40000 40000 40000
1 Feb 50000 50000 50000
2 Mar 42000 42000 42000
我的第一遍是使用
简单地转置分析
df = df.T
除了 ISIN 行(即我想要的列 headers)仍然位于数据集中之外,这种方法有效:
0 1 2
ISIN A B C
Jan 40000 40000 40000
Feb 50000 50000 50000
Mar 42000 42000 42000
然后我尝试在进行转置之前弹出 ISIN 行,即
ISIN = df.pop('ISIN')
df = df.T
这去掉了 ISIN 行,但是当我尝试插入弹出的列(使用 df.insert)并更改轴时...我卡住了
我也尝试过使用 df.melt,但我很难在正确的地方找到正确的东西
我相信这很容易,但我在这里兜圈子,我真的很感激一些智慧。
谢谢!
当您转置 DataFrame 时,您还交换了索引和列。所以你必须明确地设置索引:
df = df.set_index('ISIN').T.reset_index()
您将获得:
ISIN index A B C
0 Jan 40000 50000 42000
1 Feb 40000 50000 42000
2 Mar 40000 50000 42000
值正确,但标签不正确。您可以使用 rename_axis
:
修复它们
df = df.set_index('ISIN').T.rename_axis('Date').reset_index().rename_axis(None, axis=1)
你得到了预期的结果:
Date A B C
0 Jan 40000 50000 42000
1 Feb 40000 50000 42000
2 Mar 40000 50000 42000
转置时索引变成列,列索引,所以需要先设置ISIN为索引再转置
import pandas as pd
df = pd.DataFrame({'ISIN': ['A', 'B', 'C'],
'Jan': [40000, 50000, 42000],
'Feb': [40000, 50000, 42000],
'Mar': [40000, 50000, 42000]})
df.set_index('ISIN', inplace=True)
print(df.T)
产生:
ISIN A B C
Jan 40000 50000 42000
Feb 40000 50000 42000
Mar 40000 50000 42000
你可以试试:
df.rename(columns={'ISIN': 'Date'}).set_index('Date').T
结果:
Date A B C
Jan 40000 50000 42000
Feb 40000 50000 42000
Mar 40000 50000 42000
我得到了以下数据框
df = pd.DataFrame({'ISIN': ['A', 'B', 'C'],
'Jan': [40000, 50000, 42000],
'Feb': [40000, 50000, 42000],
'Mar': [40000, 50000, 42000]})
产生
ISIN Jan Feb Mar
0 A 40000 50000 42000
1 B 40000 50000 42000
2 C 40000 50000 42000
我正在尝试生成数据如下所示的输出:
Date A B C
0 Jan 40000 40000 40000
1 Feb 50000 50000 50000
2 Mar 42000 42000 42000
我的第一遍是使用
简单地转置分析df = df.T
除了 ISIN 行(即我想要的列 headers)仍然位于数据集中之外,这种方法有效:
0 1 2
ISIN A B C
Jan 40000 40000 40000
Feb 50000 50000 50000
Mar 42000 42000 42000
然后我尝试在进行转置之前弹出 ISIN 行,即
ISIN = df.pop('ISIN') df = df.T
这去掉了 ISIN 行,但是当我尝试插入弹出的列(使用 df.insert)并更改轴时...我卡住了
我也尝试过使用 df.melt,但我很难在正确的地方找到正确的东西
我相信这很容易,但我在这里兜圈子,我真的很感激一些智慧。
谢谢!
当您转置 DataFrame 时,您还交换了索引和列。所以你必须明确地设置索引:
df = df.set_index('ISIN').T.reset_index()
您将获得:
ISIN index A B C
0 Jan 40000 50000 42000
1 Feb 40000 50000 42000
2 Mar 40000 50000 42000
值正确,但标签不正确。您可以使用 rename_axis
:
df = df.set_index('ISIN').T.rename_axis('Date').reset_index().rename_axis(None, axis=1)
你得到了预期的结果:
Date A B C
0 Jan 40000 50000 42000
1 Feb 40000 50000 42000
2 Mar 40000 50000 42000
转置时索引变成列,列索引,所以需要先设置ISIN为索引再转置
import pandas as pd
df = pd.DataFrame({'ISIN': ['A', 'B', 'C'],
'Jan': [40000, 50000, 42000],
'Feb': [40000, 50000, 42000],
'Mar': [40000, 50000, 42000]})
df.set_index('ISIN', inplace=True)
print(df.T)
产生:
ISIN A B C
Jan 40000 50000 42000
Feb 40000 50000 42000
Mar 40000 50000 42000
你可以试试:
df.rename(columns={'ISIN': 'Date'}).set_index('Date').T
结果:
Date A B C
Jan 40000 50000 42000
Feb 40000 50000 42000
Mar 40000 50000 42000