我有以下数据框。我想根据元素的列和索引创建一个新的数据框,但我无法引用它们的索引名称。
AAA BBB CCC DDD
A NaN NaN NaN NaN
B NaN NaN NaN NaN
C NaN NaN NaN NaN
D NaN NaN NaN NaN
代码:
df_ind = {'A' : '2014' ,'B': '2011' , 'C': '2007' , 'D' : '2009'}
df_col = {'AAA': '2011' ,'BBB': '2015' , 'CCC': '2007' , 'DDD' : '2012'}
df_tmp = pd.DataFrame(index = df_ind.keys() , columns =df_col.keys() )
print df_tmp
df4 = pd.DataFrame(np.where( int(df_col[df_tmp.column]-df_ind[tmp_df.index]) >1 , True, False) , index = df_ind.keys() , columns =df_col.keys() )
print df4
基本上,我希望将其列和日期之间的差异小于2年的元素设为True,除非为假。
Edit1:修改了问题以澄清它。
答案 0 :(得分:2)
df_tmp.ix['B', 'AAA'] = 'green'
df_tmp.fillna('red', inplace=True)
print (df_tmp)
AAA BBB CCC DDD
A red red red red
B green red red red
C red red red red
D red red red red
编辑:
import pandas as pd
df_ind = {'A' : '2014' ,'B': '2011' , 'C': '2007' , 'D' : '2009'}
df_col = {'AAA': '2011' ,'BBB': '2015' , 'CCC': '2007' , 'DDD' : '2012'}
df_tmp = pd.DataFrame(index = df_ind.keys() , columns =df_col.keys() )
df_tmp.index = df_tmp.index.sort_values()
print (df_tmp)
AAA BBB CCC DDD
A NaN NaN NaN NaN
B NaN NaN NaN NaN
C NaN NaN NaN NaN
D NaN NaN NaN NaN
#original df to df_orig
df_orig = df_tmp.copy()
#replace column and index name to values of dictionaries
df_tmp.columns = df_tmp.columns.map(df_col.get).astype(int)
df_tmp.index = df_tmp.index.map(df_ind.get).astype(int)
print (df_tmp)
2011 2015 2007 2012
2014 NaN NaN NaN NaN
2011 NaN NaN NaN NaN
2007 NaN NaN NaN NaN
2009 NaN NaN NaN NaN
#fill NaN values by column names
df_tmp = df_tmp.fillna(df_tmp.columns.to_series())
#substract index values from all dataframe
df = df_tmp.sub(df_tmp.index.to_series(), axis=0)
#replace original names
df.columns = df_orig.columns
df.index = df_orig.index
print (df)
AAA BBB CCC DDD
A -3 1 -7 -2
B 0 4 -4 1
C 4 8 0 5
D 2 6 -2 3
#compare by condition
print (df > 1)
AAA BBB CCC DDD
A False False False False
B False True False False
C True True False True
D True True False True