gpt4 book ai didi

python - 如果定义了数据列限制,则按默认值填充行

转载 作者:行者123 更新时间:2023-12-01 14:12:03 25 4
gpt4 key购买 nike

我需要根据 StartFinish 列中的信息在 DataFrame 中按默认值 =1 填充行。
因此,填充行中分隔列的限制是根据 ['Start', 'Finish'] 定义的。

DataFrame,df1 是:

ID  Car       Jan17     Jun18  Dec18  Apr19   Start   Finish                           
0 Nissan 0.0 1.7 3.7 0.0 Jun18 Dec18
1 Porsche 10.0 0.0 2.8 3.5 Jan17 Apr19
2 Golf 0.0 1.7 3.0 2.0 Jun18 Apr19
3 Toyota 1.0 0.0 3.0 5.2 Jan17 Apr19
4 Mazda 0.0 0.0 3.0 4.2 Dec18 Apr19
5 Mercedes 0.0 0.0 0.0 7.2 Apr19 Apr19
6 Passat 0.0 3.0 0.0 0.0 Jun18 Jun18

例如,如果有第 0 行:开始 = Jun18Finish = Dec18

Jun18Dec18,第 0 行的值应由 1 填充。

我尝试使用 numpy.sign() 函数,但如果 0.0 介于两个非零值之间,则会出现错误结果。

预期结果是df2:

ID  Car       Jan17     Jun18  Dec18  Apr19   Start   Finish                           
0 Nissan 0.0 1.0 1.0 0.0 Jun18 Dec18
1 Porsche 1.0 1.0 1.0 1.0 Jan17 Apr19
2 Golf 0.0 1.0 1.0 1.0 Jun18 Apr19
3 Toyota 1.0 1.0 1.0 1.0 Jan17 Apr19
4 Mazda 0.0 0.0 1.0 1.0 Dec18 Apr19
5 Mercedes 0.0 0.0 0.0 1.0 Apr19 Apr19
6 Passat 0.0 1.0 0.0 0.0 Jun18 Jun18

最佳答案

get_dummies + 插值

这要求您的列按时间顺序排序,并且理想情况下开始和完成始终存在于列名称中。

df = df.set_index(['ID', 'Car', 'Start', 'Finish'])

s1 = (pd.get_dummies(df.index.get_level_values('Start'))
.reindex(df.columns, axis=1)
.replace(0, np.NaN))
s2 = (pd.get_dummies(df.index.get_level_values('Finish'))
.reindex(df.columns, axis=1)
.replace(0, np.NaN))

res = s1.combine_first(s2).interpolate(axis=1, limit_area='inside').fillna(0, downcast='infer')
res.index = df.index
res = res.reset_index()

输出res:

   ID       Car  Start Finish  Jan17  Jun18  Dec18  Apr19
0 0 Nissan Jun18 Dec18 0 1 1 0
1 1 Porsche Jan17 Apr19 1 1 1 1
2 2 Golf Jun18 Apr19 0 1 1 1
3 3 Toyota Jan17 Apr19 1 1 1 1
4 4 Mazda Dec18 Apr19 0 0 1 1
5 5 Mercedes Apr19 Apr19 0 0 0 1
6 6 Passat Jun18 Jun18 0 1 0 0

StartFinish 已经从数据本身派生的情况下(似乎是第一个和最后一个非零列),您可以跳过所有假人并在原始 DataFrame 上使用 where

df = df.set_index(['ID', 'Car', 'Start', 'Finish'])
res = (df.where(df.ne(0))
.clip(1,1)
.interpolate(axis=1, limit_area='inside')
.fillna(0, downcast='infer')
.reset_index())

关于python - 如果定义了数据列限制,则按默认值填充行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com