如何获取日期出现的新列计数
How to get a new column count number of time appear of a date
我有这个数据类型的数据框
Date Time
0 2022-05-20 17:07:00
1 2022-05-20 09:14:00
2 2022-05-19 18:56:00
3 2022-05-19 13:53:00
4 2022-05-19 13:52:00
... ... ...
81 2022-04-22 09:53:00
82 2022-04-20 18:20:00
83 2022-04-20 12:53:00
84 2022-04-20 12:12:00
85 2022-04-20 09:50:00
86 rows × 2 columns
Date datetime64[ns]
Time object
dtype: object
我试过了
df1 = df[['Date','Time']].groupby(['Date']).agg(['count'])
得到
Time
Date count
2022-04-20 4
2022-04-22 4
2022-04-25 3
2022-04-26 6
2022-04-27 4
2022-04-28 4
2022-04-29 4
2022-05-02 4
2022-05-03 4
2022-05-04 4
当我尝试时时间也消失了
df = df.groupby(['Date'])['Date'].count().reset_index(name='Counts')
0 2022-04-20 4
1 2022-04-22 4
2 2022-04-25 2
3 2022-04-26 6
4 2022-04-27 4
所以时间列刚刚消失了。我如何获得一个数据框,其中日期将是索引,该日期的时间,计算该日期的出现次数?我的项目是如果日期数是奇数,则找出日期内时间的差异。例如,如果 2020 年 5 月 19 日有 4 个时间条目,那么我需要找出条目 1 和条目 2 之间的差异,然后是条目 3 和条目 4 之间的差异,将以上内容相加得到最终结果。不知道有没有比dataframe更优雅的方法。
您可以将按日期计数合并到原始 DF。有帮助吗?
df2=df.groupby(['Date'])['Date'].count().reset_index(name='count')
df3=df.merge(df2,
on='Date', how='left')
df3.set_index('Date', inplace=True)
df3
Time count
Date
2022-05-20 17:07:00 2
2022-05-20 09:14:00 2
2022-05-19 18:56:00 3
2022-05-19 13:53:00 3
2022-05-19 13:52:00 3
2022-04-22 09:53:00 1
2022-04-20 18:20:00 4
2022-04-20 12:53:00 4
2022-04-20 12:12:00 4
2022-04-20 09:50:00 4
要让日期只出现一次,这里是
df2=df.groupby(['Date'])['Date'].count().reset_index(name='count')
df3=df.merge(df2, on='Date', how='left')
df3=df3.reset_index()
df3['index'] = 'col' # it is added to make use of pd.pivot below, a workaround
df3.pivot(index=['Date','Time','count'], columns='index')
Date Time count
2022-04-20 09:50:00 4
12:12:00 4
12:53:00 4
18:20:00 4
2022-04-22 09:53:00 1
2022-05-19 13:52:00 3
13:53:00 3
18:56:00 3
2022-05-20 09:14:00 2
您可以使用 nunique
:
df['count'] = df.groupby('Date').transform('nunique')
print(df)
# Output
Date Time count
0 2022-05-20 0 days 17:07:00 2
1 2022-05-20 0 days 09:14:00 2
2 2022-05-19 0 days 18:56:00 3
3 2022-05-19 0 days 13:53:00 3
4 2022-05-19 0 days 13:52:00 3
81 2022-04-22 0 days 09:53:00 1
82 2022-04-20 0 days 18:20:00 4
83 2022-04-20 0 days 12:53:00 4
84 2022-04-20 0 days 12:12:00 4
85 2022-04-20 0 days 09:50:00 4
我有这个数据类型的数据框
Date Time
0 2022-05-20 17:07:00
1 2022-05-20 09:14:00
2 2022-05-19 18:56:00
3 2022-05-19 13:53:00
4 2022-05-19 13:52:00
... ... ...
81 2022-04-22 09:53:00
82 2022-04-20 18:20:00
83 2022-04-20 12:53:00
84 2022-04-20 12:12:00
85 2022-04-20 09:50:00
86 rows × 2 columns
Date datetime64[ns]
Time object
dtype: object
我试过了
df1 = df[['Date','Time']].groupby(['Date']).agg(['count'])
得到
Time
Date count
2022-04-20 4
2022-04-22 4
2022-04-25 3
2022-04-26 6
2022-04-27 4
2022-04-28 4
2022-04-29 4
2022-05-02 4
2022-05-03 4
2022-05-04 4
当我尝试时时间也消失了
df = df.groupby(['Date'])['Date'].count().reset_index(name='Counts')
0 2022-04-20 4
1 2022-04-22 4
2 2022-04-25 2
3 2022-04-26 6
4 2022-04-27 4
所以时间列刚刚消失了。我如何获得一个数据框,其中日期将是索引,该日期的时间,计算该日期的出现次数?我的项目是如果日期数是奇数,则找出日期内时间的差异。例如,如果 2020 年 5 月 19 日有 4 个时间条目,那么我需要找出条目 1 和条目 2 之间的差异,然后是条目 3 和条目 4 之间的差异,将以上内容相加得到最终结果。不知道有没有比dataframe更优雅的方法。
您可以将按日期计数合并到原始 DF。有帮助吗?
df2=df.groupby(['Date'])['Date'].count().reset_index(name='count')
df3=df.merge(df2,
on='Date', how='left')
df3.set_index('Date', inplace=True)
df3
Time count
Date
2022-05-20 17:07:00 2
2022-05-20 09:14:00 2
2022-05-19 18:56:00 3
2022-05-19 13:53:00 3
2022-05-19 13:52:00 3
2022-04-22 09:53:00 1
2022-04-20 18:20:00 4
2022-04-20 12:53:00 4
2022-04-20 12:12:00 4
2022-04-20 09:50:00 4
要让日期只出现一次,这里是
df2=df.groupby(['Date'])['Date'].count().reset_index(name='count')
df3=df.merge(df2, on='Date', how='left')
df3=df3.reset_index()
df3['index'] = 'col' # it is added to make use of pd.pivot below, a workaround
df3.pivot(index=['Date','Time','count'], columns='index')
Date Time count
2022-04-20 09:50:00 4
12:12:00 4
12:53:00 4
18:20:00 4
2022-04-22 09:53:00 1
2022-05-19 13:52:00 3
13:53:00 3
18:56:00 3
2022-05-20 09:14:00 2
您可以使用 nunique
:
df['count'] = df.groupby('Date').transform('nunique')
print(df)
# Output
Date Time count
0 2022-05-20 0 days 17:07:00 2
1 2022-05-20 0 days 09:14:00 2
2 2022-05-19 0 days 18:56:00 3
3 2022-05-19 0 days 13:53:00 3
4 2022-05-19 0 days 13:52:00 3
81 2022-04-22 0 days 09:53:00 1
82 2022-04-20 0 days 18:20:00 4
83 2022-04-20 0 days 12:53:00 4
84 2022-04-20 0 days 12:12:00 4
85 2022-04-20 0 days 09:50:00 4