我在Python编码方面非常陌生,所以我试图掌握一些基础知识 - 任何输入都值得赞赏。
我有一份每周日期的列表,我正在尝试运行一个' if'日期的声明,即如果日期数小于7,则创建一个因子x的列,或者创建一个因子y - 如下表所示:
week day check factor
0 2017-01-08 8 False x
1 2017-01-15 15 False x
2 2017-01-22 22 False x
3 2017-01-29 29 False x
4 2017-02-05 5 True y
我尝试了以下代码:
if df['day'] <7 :
factor=weeks['day']/7
else:
....
并收到错误:
ValueError: The truth value of a Series is ambiguous
我已经研究过,并且理解上面的代码试图测试整个列,因此不能有明确的真/假响应。我已经看到了关于所有/任何的一些评论,但这些也没有给我我正在寻找的回应。有没有办法测试列中的每个项目并根据值返回不同的输出?
答案 0 :(得分:6)
如果需要,请转换“周”。使用to_datetime
列In [47]:
df['week'] = pd.to_datetime(df['week'])
df['factor'] = np.where(df['week'].dt.day < 7, 'y', 'x')
df
Out[47]:
week day check factor
0 2017-01-08 8 False x
1 2017-01-15 15 False x
2 2017-01-22 22 False x
3 2017-01-29 29 False x
4 2017-02-05 5 True y
dtype然后您只需使用dt.day
比较日属性,并将其用作np.where
的条件:
#!/bin/bash
echo "invoking x/X_FE with $1"
sh /opt/xyz/x/X_FE.sh $1
echo "invoking x/X_BE with $1"
sh /opt/xyz/x/X_BE.sh $1
echo "invoking y/Y_FE with $1"
sh /opt/xyz/y/Y_FE.sh $1
echo "invoking x/Y_BE with $1"
sh /opt/xyz/y/Y_BE.sh $1
echo "invoking z/Z_FE with $1"
sh /opt/xyz/z/Z_BE.sh $1
答案 1 :(得分:0)
您可以使用apply
。
这适用于您的用例:
df['factor'] = df.apply(lambda row: "y" if row['day'] < 7 else "x", axis=1)
这将迭代每一行(axis=1
),并检查day
值。如果小于7,则该值为&#39; y&#39;否则将为&#39; n&#39;。
此输出(例如):
check day week factor
0 False 8 2017-01-08 x
1 True 5 2017-02-05 y
此外,因为你已经有了#34;一天&#34;专栏,你可以直接使用它,避免申请:
msk = df['day'] < 7 # Series of True/False values based on condition
df[factor] = msk.replace([True, False], ['y', 'x']) #convert True/False to y/x