我有一个像下面这样的pandas数据框
Year Month Day Securtiy Trade Value NewDate
2011 1 10 AAPL Buy 1500 0
我的问题是,如何将列Year
,Month
,Day
合并到列NewDate
中
以便newDate
列看起来像以下
2011-1-10
答案 0 :(得分:1)
最好的方法是在以csv读取时解析它:
In [1]: df = pd.read_csv('foo.csv', sep='\s+', parse_dates=[['Year', 'Month', 'Day']])
In [2]: df
Out[2]:
Year_Month_Day Securtiy Trade Value NewDate
0 2011-01-10 00:00:00 AAPL Buy 1500 0
您可以在没有标题的情况下执行此操作,方法是在阅读时定义列名:
pd.read_csv(input_file, header=['Year', 'Month', 'Day', 'Security','Trade', 'Value' ], parse_dates=[['Year', 'Month', 'Day']])
如果它已经在您的DataFrame中,您可以使用apply:
In [11]: df['Date'] = df.apply(lambda s: pd.Timestamp('%s-%s-%s' % (s['Year'], s['Month'], s['Day'])), 1)
In [12]: df
Out[12]:
Year Month Day Securtiy Trade Value NewDate Date
0 2011 1 10 AAPL Buy 1500 0 2011-01-10 00:00:00
答案 1 :(得分:1)
df ['年'] +' - ' + df ['月'] +' - ' + df ['日期']
答案 2 :(得分:0)
您可以按如下方式创建新的时间戳:
df['newDate'] = df.apply(lambda x: pd.Timestamp('{0}-{1}-{2}'
.format(x.Year, x.Month, x.Day),
axix=1)
>>> df
Year Month Day Securtiy Trade Value NewDate newDate
0 2011 1 10 AAPL Buy 1500 0 2011-01-10