引用数据框对象的索引和列?

时间:2016-06-20 12:13:24

标签: python numpy pandas dataframe

我有以下数据框。我想根据元素的列和索引创建一个新的数据框,但我无法引用它们的索引名称。

   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:修改了问题以澄清它。

1 个答案:

答案 0 :(得分:2)

我认为您可以ix使用fillna

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
相关问题