【发布时间】:2020-12-22 17:18:05
【问题描述】:
所以我有点迷路了。我基本上有以下df:
df = pd.DataFrame({'period':['Wk20-20','Wkend', 'Wk42-20', 'Q'],
'value': [None, '21-12', None, '4']})
period value
0 Wk20-20 None
1 Wkend 21-12
2 Wk42-20 None
3 Q 4
现在我想将类似于“Wk20-20”的值拆分为“周”作为周期列,将 20-20 作为值。
我尝试应用以下功能:
def transform(row):
if re.match(r'Wk\d\d-\d\d', str(row["Description"])):
print(type(row['Period_Date']))
row['Period_Date'] = row['Description'].split('Wk')[1]
return 'Week'
if row["Description"] == 'Wkend':
return 'Wkend'
if row["Description"] == 'Q':
return 'Quarter'
df['Description'] = df.apply(lambda row: transform(row), axis=1)
这行得通!我很惊讶,因为我只是在 stackoverflow 上给出这个例子时才注意到它有效。
Description Period_Date
0 Week 20-20
1 Wkend 21-12-2020
2 Week 42-20
3 Quarter 4
现在我完全迷失了,因为我有或多或少完全相同的数据框(还有几列),但它在那个数据框上不起作用。我完全不知道为什么。 当我从这个数据框中选择一堆列时,它会再次起作用。当我选择更多列时,它不再起作用了..有什么想法吗?
编辑:确切地说,它返回这个df:
period value
0 Week None
1 Wkend 21-12
2 Week None
3 Q 4
所以它改变的是周期列,而不是值
【问题讨论】:
标签: python pandas dataframe row apply