Python 如何从现有数据帧创建新数据帧
我的数据就是这样的格式Python 如何从现有数据帧创建新数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我的数据就是这样的格式 T1 YEAR JAN FEB MAR APRL DEC G1 ABC 2015 0 18.6 0.9 6.9 3.0 DATA ABC 2016 8.9 0 0 3.9 0 TECH DEF 2020 0 9.0 0 8.06 6 TECH GHI 2017 0 1.1 9.8 6.8
T1 YEAR JAN FEB MAR APRL DEC G1
ABC 2015 0 18.6 0.9 6.9 3.0 DATA
ABC 2016 8.9 0 0 3.9 0 TECH
DEF 2020 0 9.0 0 8.06 6 TECH
GHI 2017 0 1.1 9.8 6.8 0 OPT
JKL 2018 7.1 2.1 0 0 8 DATA
JKL 2020 5 2 6 6 5 OTHER
我所做的是:
df = df.groupby(['T1','YEAR','G1'])['JAN','FEB','MAR','APRL','DEC'].SUM()
我得到的输出是:
JAN FEB MAR APRL DEC
T1 G1 YEAR
----------------------------------------------------------
ABC DATA 2015 25.9 55.8 5.9 7.9 66
2016 2 0.9 0 8.0 66
2017 0 88 1.09 66 0
2018 55 77 7.1 6.0 1.9
2019 7.9 5.0 6.9 98 6.0
2020 7 55.0 77 98 7.8
ABC TECH (2015-2020)....
现在我需要以下格式的输出:
T1 G1 VALUES TIME
---------------------------------
ABC DATA 25.9 2015-01-01 00:00:00
ABC DATA 55.8 2015-02-01 00:00:00
ABC DATA 5.9 2015-03-01 00:00:00
ABC DATA 7.9 2015-04-01 00:00:00
我从我这边开始尝试的是:
for i , j in df.iterrows():
for n in range (0,276) (here I want to know how can I put my whole iterating value under one
value =df.iloc[n,:] column name 'Value')
print(value)
还有,我如何访问groupby值T1,G1,YEAR
我试着这样做:
GRP = pd.DataFrame(df.groupby(['T1','G1','YEAR']))
在这里,我试图创建一个新的数据框架,其中包含T1、G1列,然后我会在数据框架中添加该值列
有谁能告诉我如何解决这个问题吗?你可以
融化数据帧,然后创建一个新的日期时间列。然后保留/重新排列必要的列并对值进行排序:
df = df.groupby(['T1','YEAR','G1'])[['JAN','FEB','MAR','APRL','DEC']].sum().reset_index().rename({'APRL' : 'APR'}, axis=1)
df = df.melt(id_vars=['T1', 'YEAR','G1'], var_name='TIME', value_name='VALUES')
df['TIME'] = pd.to_datetime(df['TIME'] + '-' + df['YEAR'].astype(str))
df = df[['T1', 'G1', 'VALUES', 'TIME']].sort_values(['T1', 'G1','TIME'])
df
Out[1]:
T1 G1 VALUES TIME
0 ABC DATA 0.00 2015-01-01
6 ABC DATA 18.60 2015-02-01
12 ABC DATA 0.90 2015-03-01
18 ABC DATA 6.90 2015-04-01
24 ABC DATA 3.00 2015-12-01
1 ABC TECH 8.90 2016-01-01
7 ABC TECH 0.00 2016-02-01
13 ABC TECH 0.00 2016-03-01
19 ABC TECH 3.90 2016-04-01
25 ABC TECH 0.00 2016-12-01
2 DEF TECH 0.00 2020-01-01
8 DEF TECH 9.00 2020-02-01
14 DEF TECH 0.00 2020-03-01
20 DEF TECH 8.06 2020-04-01
26 DEF TECH 6.00 2020-12-01
3 GHI OPT 0.00 2017-01-01
9 GHI OPT 1.10 2017-02-01
15 GHI OPT 9.80 2017-03-01
21 GHI OPT 6.80 2017-04-01
27 GHI OPT 0.00 2017-12-01
4 JKL DATA 7.10 2018-01-01
10 JKL DATA 2.10 2018-02-01
16 JKL DATA 0.00 2018-03-01
22 JKL DATA 0.00 2018-04-01
28 JKL DATA 8.00 2018-12-01
5 JKL OTHER 5.00 2020-01-01
11 JKL OTHER 2.00 2020-02-01
17 JKL OTHER 6.00 2020-03-01
23 JKL OTHER 6.00 2020-04-01
29 JKL OTHER 5.00 2020-12-01
您可以melt
dataframe,然后创建一个新的datetime列。然后保留/重新排列必要的列并对值进行排序:
df = df.groupby(['T1','YEAR','G1'])[['JAN','FEB','MAR','APRL','DEC']].sum().reset_index().rename({'APRL' : 'APR'}, axis=1)
df = df.melt(id_vars=['T1', 'YEAR','G1'], var_name='TIME', value_name='VALUES')
df['TIME'] = pd.to_datetime(df['TIME'] + '-' + df['YEAR'].astype(str))
df = df[['T1', 'G1', 'VALUES', 'TIME']].sort_values(['T1', 'G1','TIME'])
df
Out[1]:
T1 G1 VALUES TIME
0 ABC DATA 0.00 2015-01-01
6 ABC DATA 18.60 2015-02-01
12 ABC DATA 0.90 2015-03-01
18 ABC DATA 6.90 2015-04-01
24 ABC DATA 3.00 2015-12-01
1 ABC TECH 8.90 2016-01-01
7 ABC TECH 0.00 2016-02-01
13 ABC TECH 0.00 2016-03-01
19 ABC TECH 3.90 2016-04-01
25 ABC TECH 0.00 2016-12-01
2 DEF TECH 0.00 2020-01-01
8 DEF TECH 9.00 2020-02-01
14 DEF TECH 0.00 2020-03-01
20 DEF TECH 8.06 2020-04-01
26 DEF TECH 6.00 2020-12-01
3 GHI OPT 0.00 2017-01-01
9 GHI OPT 1.10 2017-02-01
15 GHI OPT 9.80 2017-03-01
21 GHI OPT 6.80 2017-04-01
27 GHI OPT 0.00 2017-12-01
4 JKL DATA 7.10 2018-01-01
10 JKL DATA 2.10 2018-02-01
16 JKL DATA 0.00 2018-03-01
22 JKL DATA 0.00 2018-04-01
28 JKL DATA 8.00 2018-12-01
5 JKL OTHER 5.00 2020-01-01
11 JKL OTHER 2.00 2020-02-01
17 JKL OTHER 6.00 2020-03-01
23 JKL OTHER 6.00 2020-04-01
29 JKL OTHER 5.00 2020-12-01
我在datetime转换的第三行出现错误…请注意我的代码行:.rename({'APRL':'APR'}
。请确保您所有的月份都是一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月
。否则,您应该像我一样重命名它们。是的,我的月份只有@David Erickson的格式。但是我的错误是“未知字符串格式:'.Time-2015')@SimranAgrawaldf['YEAR']的输出是什么。unique()
?你能把它贴在这里吗?另外,在运行代码之前,df.columns
的输出是什么?你能把它也贴在这里吗?Df['YEAR']。唯一()o/p:arry([20152016201920202018],dtype=int 64)。Df.columns。0/p:Index['T1','YEAR','G1','TIME','VALUES')我在日期时间转换的第三行中遇到错误…请注意我的代码行:。重命名({'APRL':'APR'}
。请确保您所有的月份都是一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月
。否则,您应该像我一样重命名它们。是的,我的月份只有@David Erickson这种格式。但我的错误是“未知字符串格式:'.Time-2015')@SimranAgrawaldf['YEAR']的输出是什么。unique()
?您可以将其粘贴到这里吗?另外,在运行代码之前,df.columns的输出是什么?您也可以将其粘贴到这里吗?df['YEAR'].unique()o/p:arry([20152016201920202018],dtype=int 64)。df.columns.0/p:Index['T1','YEAR','G1','TIME','VALUES')