我有一个类似于这种格式的.csv文件

然后我想把它转换成

我怎么才能和巨蟒熊猫一起做呢?
谢谢
发布于 2021-08-16 09:19:03
如果您加载它,那么您将有类似的DataFrame
Y M 1 2 3
0 2019 1 A E H
1 2020 2 B F I
2 2021 3 C G J设置多索引usinig year和month
df = df.set_index(['Y','M']) 1 2 3
Y M
2019 1 A E H
2020 2 B F I
2021 3 C G J使用stack()重塑它
df = df.stack()Y M
2019 1 1 A
2 E
3 H
2020 2 1 B
2 F
3 I
2021 3 1 C
2 G
3 J
dtype: object可以将名称添加到列中。
df.index.set_names(['Y', 'M', 'D'], inplace=True)Y M D
2019 1 1 A
2 E
3 H
2020 2 1 B
2 F
3 I
2021 3 1 C
2 G
3 J
dtype: object重置索引以获得正常列
df = df.reset_index() Y M D 0
0 2019 1 1 A
1 2019 1 2 E
2 2019 1 3 H
3 2020 2 1 B
4 2020 2 2 F
5 2020 2 3 I
6 2021 3 1 C
7 2021 3 2 G
8 2021 3 3 J用日期创建列
df['date'] = df.apply(lambda row: "{}/{}/{}".format(row['D'], row['M'], row['Y']), axis=1) Y M D 0 date
0 2019 1 1 A 1/1/2019
1 2019 1 2 E 2/1/2019
2 2019 1 3 H 3/1/2019
3 2020 2 1 B 1/2/2020
4 2020 2 2 F 2/2/2020
5 2020 2 3 I 3/2/2020
6 2021 3 1 C 1/3/2021
7 2021 3 2 G 2/3/2021
8 2021 3 3 J 3/3/2021您可以删除year、month、day
df.drop(['Y', 'M','D'], axis=1, inplace=True) 0 date
0 A 1/1/2019
1 E 2/1/2019
2 H 3/1/2019
3 B 1/2/2020
4 F 2/2/2020
5 I 3/2/2020
6 C 1/3/2021
7 G 2/3/2021
8 J 3/3/2021还可以重命名列。
df.rename(columns={0:'value'}, inplace=True) value date
0 A 1/1/2019
1 E 2/1/2019
2 H 3/1/2019
3 B 1/2/2020
4 F 2/2/2020
5 I 3/2/2020
6 C 1/3/2021
7 G 2/3/2021
8 J 3/3/2021并且可以更改列的顺序。
df = df[['date', 'value']] date value
0 1/1/2019 A
1 2/1/2019 E
2 3/1/2019 H
3 1/2/2020 B
4 2/2/2020 F
5 3/2/2020 I
6 1/3/2021 C
7 2/3/2021 G
8 3/3/2021 J最小工作码
import pandas as pd
data = {
'Y': [2019, 2020, 2021],
'M': [1,2,3],
'1': ['A','B','C'],
'2': ['E','F','G'],
'3': ['H','I','J'],
}
df = pd.DataFrame(data)
print(df)
df = df.set_index(['Y','M'])
print(df)
df = df.stack()
print(df)
df.index.set_names(['Y', 'M', 'D'], inplace=True)
print(df)
df = df.reset_index()
print(df)
df['date'] = df.apply(lambda row: "{}/{}/{}".format(row['D'], row['M'], row['Y']), axis=1)
print(df)
df.drop(['Y', 'M','D'], axis=1, inplace=True)
print(df)
df.rename(columns={0:'value'}, inplace=True)
print(df)
df = df[['date', 'value']]
print(df)https://stackoverflow.com/questions/68799478
复制相似问题