Pin*_*ts0 4 python conditional date fill pandas
我目前有以下示例数据框:
No FlNo DATE Loc Type
20 1826 6/1/2017 AAA O
20 1112 6/4/2017 BBB O
20 1234 6/6/2017 CCC O
20 43 6/7/2017 DDD O
20 1840 6/8/2017 EEE O
Run Code Online (Sandbox Code Playgroud)
我想在彼此顶部的两行中填写缺失的日期。我还想用顶行中的值填充非日期列的值,但将“类型”列留空以填充行。
请查看所需的输出:
No FlNo DATE Loc Type
20 1826 6/1/2017 AAA O
20 1826 6/2/2017 AAA
20 1826 6/3/2017 AAA
20 1112 6/4/2017 BBB O
20 1112 6/5/2017 BBB
20 1234 6/6/2017 CCC O
20 43 6/7/2017 DDD O
20 1840 6/8/2017 EEE O
Run Code Online (Sandbox Code Playgroud)
我在 Google 和 stackoverflow 上到处搜索,但没有找到任何日期填写熊猫数据框的答案。
首先,使用,转换DATE为datetime列pd.to_datetime
df.DATE = pd.to_datetime(df.DATE)
Run Code Online (Sandbox Code Playgroud)
选项 1
使用resample+ ffill,然后稍后重置类型列。首先,将唯一日期存储在某个列表中:
dates = df.DATE.unique()
Run Code Online (Sandbox Code Playgroud)
现在,
df = df.set_index('DATE').resample('1D').ffill().reset_index()
df.Type = df.Type.where(df.DATE.isin(dates), '')
Run Code Online (Sandbox Code Playgroud)
df
DATE No FlNo Loc Type
0 2017-06-01 20 1826 AAA O
1 2017-06-02 20 1826 AAA
2 2017-06-03 20 1826 AAA
3 2017-06-04 20 1112 BBB O
4 2017-06-05 20 1112 BBB
5 2017-06-06 20 1234 CCC O
6 2017-06-07 20 43 DDD O
7 2017-06-08 20 1840 EEE O
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以DATE恢复原状;
df.DATE = df.DATE.dt.strftime('%m/%d/%Y')
Run Code Online (Sandbox Code Playgroud)
选项 2
另一种选择是asfreq+ ffill+ fillna:
df = df.set_index('DATE').asfreq('1D').reset_index()
c = df.columns.difference(['Type'])
df[c] = df[c].ffill()
df['Type'] = df['Type'].fillna('')
Run Code Online (Sandbox Code Playgroud)
df
DATE No FlNo Loc Type
0 2017-06-01 20.0 1826.0 AAA O
1 2017-06-02 20.0 1826.0 AAA
2 2017-06-03 20.0 1826.0 AAA
3 2017-06-04 20.0 1112.0 BBB O
4 2017-06-05 20.0 1112.0 BBB
5 2017-06-06 20.0 1234.0 CCC O
6 2017-06-07 20.0 43.0 DDD O
7 2017-06-08 20.0 1840.0 EEE O
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2127 次 |
| 最近记录: |