我有以下DataFrame(这是一个浓缩版本 - 可以追溯到很久)
Week Commencing A1 A2 A3 A4
2016-01-03 28 1375 1999 1345
2016-01-10 48 1552 2428 1337
2016-01-17 43 1895 2615 1420
2016-01-24 29 1950 2568 1385
2016-01-31 41 1912 2577 1277
2016-02-07 29 2176 2771 1403
2016-02-14 50 2229 3013 1450
2016-02-21 60 2271 3029 1489
2016-02-28 43 2140 3133 1594
2016-03-06 51 2080 3140 1498
我想创建一个新列,根据特定的时间段指定标签。 IE:如果行在某个日期之前,则返回一个单词。
我尝试了以下内容:
def action(x):
if x == "True":
return "Before Migration"
if x == "False":
return "After Migration"
df.index.apply(action, axis=1)
我收到以下错误:" AttributeError:' DatetimeIndex'对象没有属性' apply'"。
我已将此更改为字符串,尝试重置索引以便我可以应用于列而不是索引,但它不起作用。
我也试过这个:
if df.index < '2016-02-14':
df["Migration_Type"] = "Before Migration"
else:
df["Migration_Type"] = "After Migration"
错误:ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
对于更好方法的任何建议也表示赞赏。
答案 0 :(得分:2)
尝试这样的事情:
# First, initialize a new column, set it to before migration by default
df = df.assign(Migration_Type = "Before Migration")
# Then, assign "after migration" to all rows after your chosen date
df.loc[df.index >= '2016-02-14', 'Migration_Type'] = "After Migration"
答案 1 :(得分:2)
df.assign(
Migration_Type=np.where(
df.index < '2016-02-14',
'Before Migration',
'After Migration'
)
)
A1 A2 A3 A4 Migration_Type
Week Commencing
2016-01-03 28 1375 1999 1345 Before Migration
2016-01-10 48 1552 2428 1337 Before Migration
2016-01-17 43 1895 2615 1420 Before Migration
2016-01-24 29 1950 2568 1385 Before Migration
2016-01-31 41 1912 2577 1277 Before Migration
2016-02-07 29 2176 2771 1403 Before Migration
2016-02-14 50 2229 3013 1450 After Migration
2016-02-21 60 2271 3029 1489 After Migration
2016-02-28 43 2140 3133 1594 After Migration
2016-03-06 51 2080 3140 1498 After Migration