如何使用熊猫堆叠数据并替换数据框中的数据?

时间:2019-03-25 22:59:07

标签: python pandas

嗨,我是python的新手,正在从事一个项目:

Repex

每年我的数据帧如下:

df1
        rating0  rating1     UAA            YEAR         Zip
        18088.0     295.0   10833.0   ...  2010-2014     601
        40859.0     154.0   16353.0   ...  2010-2014     602

df2
        rating0  rating1      UAA           YEAR         Zip
        18088.0     299.0   10033.0   ...  2011-2015     601
        40859.0     152.0   16253.0   ...  2011-2015     602

我想合并这两个csv文件,但希望我的数据彼此堆叠 例如:

2010-2014  
2010-2014
2010-2014
2011-2015
2011-2015
2011-2015

我也想将这些年份替换为一个年份(例如2010-2014),就像2014年一样

我的输入:

df1 = pd.read_csv(r"2014_zcta.csv")
df2 = pd.read_csv(r"2015_zcta.csv")


finaldf = pd.concat([df1, df2], ignore_index=True) 
finaldf['YEAR'].replace('2010-2014','2014')
finaldf['YEAR'].replace('2011-2015','2015')

但是输出没有任何变化。它不会彼此叠加,年份也不会更改为2014或2015

2 个答案:

答案 0 :(得分:0)

尝试以下代码段

final_df = pd.concat(objs = [df1, df2], axis = 0)
final_df['YEAR'] = final_df.YEAR.apply(lambda year: str(year)[-4:])

假设final_df定义如下:

final_df = pd.DataFrame({'amount':[2000, 3000, 4000, 5000], 'YEAR':['2010-2012', '2010-2012', '2015-2016', '2016-2018']})
final_df
>>> amount  YEAR
0   2000    2010-2012
1   3000    2010-2012
2   4000    2015-2016
3   5000    2016-2018

然后定义一个新列'EndYear',如下所示:

final_df['EndYear'] = final_df.YEAR.apply(lambda year: str(year)[-4:])

因此,在打印final_df时,您应该获得:

final_df
>>>   amount       YEAR     EndYear
   0    2000    2010-2012   2012
   1    3000    2010-2012   2012
   2    4000    2015-2016   2016
   3    5000    2016-2018   2018

让我知道这是否有帮助。

答案 1 :(得分:0)

系列或数据帧上的操作通常不会就地完成。这意味着该操作不会更改序列或数据框本身;它只返回应用操作的新系列或数据帧。

在您的示例中,替换

finaldf['YEAR'].replace('2010-2014','2014')

使用

finaldf['YEAR'] = finaldf['YEAR'].replace('2010-2014','2014')