如果缺少最近的数据,则添加行



我有一个数据帧,其中包含一些带有日期和国家信息的数字:

df = pd.DataFrame(data={"day": ['2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-03'],
"country": ["France", "Brazil", "Brazil", "Cuba", "France"],
"n": [1, 2, 3, 4, 5]
})

这看起来像:

day country  n
0  2021-01-01  France  1
1  2021-01-01  Brazil  2
2  2021-01-02  Brazil  3
3  2021-01-02    Cuba  4
4  2021-01-03  France  5

我想计算一些统计数据,以监控我在2021-01-03收到的数据是否包含一些错误,为此,我需要将1月3日收到的数据与之前数据的平均值(例如(进行比较。

所以我想添加一些行,这表明我在1月3日没有得到巴西和古巴的任何信息,这是我想要的输出:

country         day    n
0  France  2021-01-03  5.0
1  France  2021-01-01  1.0
2  Brazil  2021-01-01  2.0
3  Brazil  2021-01-02  3.0
4    Cuba  2021-01-02  4.0
5  Brazil  2021-01-03  NaN
6    Cuba  2021-01-03  NaN

这是我尝试过的代码,但我感觉不太";熊猫喜欢";,我相信Pandas中有一个内置的方法,或者至少有一个更好的方法可以为最近的行添加数据:

countries = pd.DataFrame({"country": df.country.unique()})
recent_date = pd.DataFrame({"day":[df.day.max()]})
countries.merge(recent_date, how="cross").merge(df, how="outer")

这就是结果:

country         day    n
0  France  2021-01-03  5.0
1  Brazil  2021-01-03  NaN
2    Cuba  2021-01-03  NaN
3  France  2021-01-01  1.0
4  Brazil  2021-01-01  2.0
5  Brazil  2021-01-02  3.0
6    Cuba  2021-01-02  4.0

(附言:我对这篇文章的标题持开放态度(

想法是过滤掉所有没有最长天数的唯一国家,并使用numpy.setdiff1d:添加到原始国家

d = df.day.max()
c = np.setdiff1d(df.country.unique(), df.loc[df['day'].eq(d), 'country'])
df = df.append(pd.DataFrame({'country':c, 'day': d}), ignore_index=True)
print (df)
day country    n
0 2021-01-01  France  1.0
1 2021-01-01  Brazil  2.0
2 2021-01-02  Brazil  3.0
3 2021-01-02    Cuba  4.0
4 2021-01-03  France  5.0
5 2021-01-03  Brazil  NaN
6 2021-01-03    Cuba  NaN

第一个想法,有点复杂:

df['day'] = pd.to_datetime(df['day'] )
c = df.loc[df['day'].eq(df['day'].max()), 'country']
df = df.append(df[['country']].drop_duplicates()
.assign(day = df['day'].max())
.query("country not in @c"), ignore_index=True)
print (df)
day country    n
0 2021-01-01  France  1.0
1 2021-01-01  Brazil  2.0
2 2021-01-02  Brazil  3.0
3 2021-01-02    Cuba  4.0
4 2021-01-03  France  5.0
5 2021-01-03  Brazil  NaN
6 2021-01-03    Cuba  NaN

最新更新