如何在ffill()期间显示按列分组,而不是使用熊猫聚合?

最棒的

这不是重复的。我已经推荐了此post_1post_2

我的问题与agg功能无关它也涉及ffill操作过程中按列分组显示尽管该代码可以正常工作,但只需共享完整代码即可让您有个好主意。问题在注释行中在下面寻找那条线。

我有一个如下所示的数据框

df = pd.DataFrame({
'subject_id':[1,1,1,1,1,1,1,2,2,2,2,2],
'time_1' :['2173-04-03 12:35:00','2173-04-03 12:50:00','2173-04-05 12:59:00','2173-05-04 13:14:00','2173-05-05 13:37:00','2173-07-06 13:39:00','2173-07-08 11:30:00','2173-04-08 16:00:00','2173-04-09 22:00:00','2173-04-11 04:00:00','2173- 04-13 04:30:00','2173-04-14 08:00:00'],
 'val' :[5,5,5,5,1,6,5,5,8,3,4,6]})
df['time_1'] = pd.to_datetime(df['time_1'])
df['day'] = df['time_1'].dt.day
df['month'] = df['time_1'].dt.month

此代码在论坛的Jezrael的帮助下所做的add missing dates基于阈值。唯一的问题是,我看不到grouped by column during output

df['time_1'] = pd.to_datetime(df['time_1'])
df['day'] = df['time_1'].dt.day
df['date'] = df['time_1'].dt.floor('d')

df1 = (df.set_index('date')
         .groupby('subject_id')
         .resample('d')
         .last()
         .index
         .to_frame(index=False))
df2 = df1.merge(df, how='left') 

thresh = 5
mask = df2['day'].notna()
s = mask.cumsum().mask(mask)
df2['count'] = s.map(s.value_counts())

df2 = df2[(df2['count'] < thresh) | (df2['count'].isna())]

df2 = df2.groupby(df2['subject_id']).ffill()  # problem is here #here is the problem

dates = df2['time_1'].dt.normalize() 
df2['time_1'] += np.where(dates == df2['date'], 0, df2['date'] - dates)
df2['day'] = df2['time_1'].dt.day
df2['val'] = df2['val'].astype(int)

如上面的代码所示,我尝试了以下方法

df2 = df2.groupby(df2['subject_id']).ffill()  # doesn't help
df2 = df2.groupby(df2['subject_id']).ffill().reset_index()  # doesn't help
df2 = df2.groupby('subject_id',as_index=False).ffill()  # doesn't help

没有subject_id的错误输出

在此处输入图片说明

我希望我的输出也有subject_id专栏

耶斯列尔

这里有2种可能的解决方案-在列表之后groupby指定列表中的所有列,然后分配回来:

cols = df2.columns.difference(['subject_id'])
df2[cols] = df2.groupby('subject_id')[cols].ffill()  # problem is here #here is the problem

或按subject_id创建索引并按索引分组:

#newer pandas versions
df2 = df2.set_index('subject_id').groupby('subject_id').ffill().reset_index()

#oldier pandas versions
df2 = df2.set_index('subject_id').groupby(level=0).ffill().reset_index()

dates = df2['time_1'].dt.normalize() 
df2['time_1'] += np.where(dates == df2['date'], 0, df2['date'] - dates)
df2['day'] = df2['time_1'].dt.day
df2['val'] = df2['val'].astype(int)
print (df2)
     subject_id       date              time_1  val  day  month  count
0             1 2173-04-03 2173-04-03 12:35:00    5    3    4.0    NaN
1             1 2173-04-03 2173-04-03 12:50:00    5    3    4.0    NaN
2             1 2173-04-04 2173-04-04 12:50:00    5    4    4.0    1.0
3             1 2173-04-05 2173-04-05 12:59:00    5    5    4.0    1.0
32            1 2173-05-04 2173-05-04 13:14:00    5    4    5.0    1.0
33            1 2173-05-05 2173-05-05 13:37:00    1    5    5.0    1.0
95            1 2173-07-06 2173-07-06 13:39:00    6    6    7.0    1.0
96            1 2173-07-07 2173-07-07 13:39:00    6    7    7.0    1.0
97            1 2173-07-08 2173-07-08 11:30:00    5    8    7.0    1.0
98            2 2173-04-08 2173-04-08 16:00:00    5    8    4.0    NaN
99            2 2173-04-09 2173-04-09 22:00:00    8    9    4.0    NaN
100           2 2173-04-10 2173-04-10 22:00:00    8   10    4.0    1.0
101           2 2173-04-11 2173-04-11 04:00:00    3   11    4.0    1.0
102           2 2173-04-12 2173-04-12 04:00:00    3   12    4.0    1.0
103           2 2173-04-13 2173-04-13 04:30:00    4   13    4.0    1.0
104           2 2173-04-14 2173-04-14 08:00:00    6   14    4.0    1.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在`ngroups`期间重置索引以按列显示分组?

如何使用熊猫按两列分组?

如何在熊猫中不按分组保留分组列

如何在两列中按日期间隔分组?

如何在 SQL 中按某些列聚合而不是按其他列聚合

如何在熊猫中按数据框分组并保留列

熊猫:按功能分组并聚合

熊猫:如何按多列分组并在多列上执行不同的聚合?

按熊猫分组创建两个聚合列

如何在不使用聚合函数的情况下按列id和manager_id分组

如何在熊猫中按批次分组?

如何在没有聚合功能的大熊猫中对列进行分组?

如何使用单个聚合函数按一列分组但在oracle上选择多列?

熊猫如何在分组到另一列时按分组大小对分组依据进行排序

在熊猫中按列分组后如何在不同列之间执行操作?

如何在熊猫中按一列或另一列分组

如何在 R 中使用按日期对它们进行分组的文本聚合行?

如何计算熊猫中列的分组和加权聚合?

熊猫-分组依据:使用多列创建聚合函数

如何在熊猫中按公共值分组并根据它分成列?

如何在熊猫中按日期分组并创建与日期关联的时间列

如何在熊猫中按两列分组,其中两者的组合是唯一的

Spark Scala:使用聚合逻辑按多列分组

使用熊猫按年份显示每月列

如何使用熊猫数据帧在直方图中按标签对列进行分组?

熊猫如何使用groupby按标签中的日期对列进行分组?

熊猫:如何按日期时间列分组,仅使用时间并舍弃日期

熊猫按多列分组

熊猫按某些列分组