如何解决如何在填充上应用条件?
我想知道如何在C_01_01_ActionPlan和C_01_03_StatusValue上使用填充,条件是如果C_01_03_StatusValue上的单元格值为None,并且如果先前的单元格为“ In Progress”,则从两个列中复制先前的单元格文本
这是文本视图
Report_Due_Date C_01_03_StatusValue C_02_01_ActionPlan
1/1/2020 None None
2/1/2020 Supplier network In Progress
3/1/2020 Supplier network In Progress
4/1/2020 Installation In Progress
5/1/2020 None None
6/1/2020 Telematics tool. In Progress
7/1/2020 None None
8/1/2020 None None
当前
预期:
if df[df['C_01_03_StatusValue']] is None and df['C_01_03_StatusValue'].shift()=='In Progress':
df['C_01_03_StatusValue'] = df['C_01_03_StatusValue'].ffill()
解决方法
您可以尝试使用import boto3,json
from pathlib import Path
import io
with open(Path.cwd().joinpath("aws-secrets.json")) as f: cfg = json.load(f)
sess = boto3.session.Session(region_name=cfg["REGION_NAME"],aws_access_key_id=cfg["ACCESS_ID"],aws_secret_access_key=cfg["ACCESS_KEY"])
pd.read_csv(io.StringIO(
sess.resource("s3").Object("silicon-myfiles","elevationdata.csv").get()["Body"].read().decode()
))
,因为它将有助于向前填充数据并且可能有用
我可以看到的唯一方法是将fillna()
回滚到您不想要的情况。使用loc[mask]
类型方法也不起作用。
import re
data = """Report_Due_Date C_01_03_StatusValue C_02_01_ActionPlan
1/1/2020 None None
2/1/2020 Supplier network In Progress
3/1/2020 Supplier network In Progress
4/1/2020 Installation In Progress
5/1/2020 None None
6/1/2020 Telematics tool. In Progress
7/1/2020 None None
8/1/2020 None None"""
a = [[t.strip() for t in re.split(" ",l) if t!=""] for l in data.split("\n")]
df = pd.DataFrame(a[1:],columns=a[0])
df = df.replace({"None":None})
df.assign(
OldC_01_03_StatusValue=df["C_01_03_StatusValue"],OldC_02_01_ActionPlan=df["C_02_01_ActionPlan"],C_01_03_StatusValue=df["C_01_03_StatusValue"].fillna(method="ffill"),C_02_01_ActionPlan=df["C_02_01_ActionPlan"].fillna(method="ffill"),).assign(
C_01_03_StatusValue=lambda dfa: np.where(dfa["OldC_02_01_ActionPlan"].shift()!="In Progress",dfa["OldC_01_03_StatusValue"],dfa["C_01_03_StatusValue"]
),C_02_01_ActionPlan=lambda dfa: np.where(dfa["OldC_02_01_ActionPlan"].shift()!="In Progress",dfa["OldC_02_01_ActionPlan"],dfa["C_02_01_ActionPlan"]
)
).drop(["OldC_01_03_StatusValue","OldC_02_01_ActionPlan"],axis=1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。