Python 计算唯一的日期数以计算ocuurance
要查找与一组值对应的唯一日期数。如果Col1、Col2、Col3的值相同,则有多少实例。 我可以只使用年、月或日,但我希望合并所有日期,以便可以找到每个唯一的日期(yyyy/mm/dd) 通过将dt.month更改为dt.year或dt.day,我可以得到年、月或日,但需要整个日期Python 计算唯一的日期数以计算ocuurance,python,pandas,date,Python,Pandas,Date,要查找与一组值对应的唯一日期数。如果Col1、Col2、Col3的值相同,则有多少实例。 我可以只使用年、月或日,但我希望合并所有日期,以便可以找到每个唯一的日期(yyyy/mm/dd) 通过将dt.month更改为dt.year或dt.day,我可以得到年、月或日,但需要整个日期 df_test = df.Date.apply(lambda dt: dt.date()).groupby\ ([df.BldgID, df.BldgHt, df.Device, df.Date.apply(lamb
df_test = df.Date.apply(lambda dt: dt.date()).groupby\
([df.BldgID, df.BldgHt, df.Device, df.Date.apply(lambda dt:\
dt.month)]).nunique()
df_test.head(10)
以下是月份值
BldgID BldgHt Device Date
108 28.0 760 9 1
10 3
104 36.0 758 10 1
11 1
41.0 758 9 1
758 10 3
758 11 2
45.0 758 10 1
45.0 758 11 1
Name: Date, dtype: int64
期望输出:
BldgID BldgHt Device Total_count
108 28.0 760 4
104 36.0 758 2
41.0 758 6
104 45.0 758 2
Total_count是每一组对应的唯一
“BldgID,BldgHt,设备”
提前谢谢
df.groupby(['BldgID','BldgHt','Device'], sort=False)['Date'].size().reset_index()
输出
BldgID BldgHt Device Date
0 108 28 760 4
1 104 36 758 2
2 104 41 758 6
3 104 45 758 2
输出
BldgID BldgHt Device Date
0 108 28 760 4
1 104 36 758 2
2 104 41 758 6
3 104 45 758 2
为已经很好的答案添加
df.groupby(['BldgID','BldgHt','Device'])['Date'].count()
为已经很好的答案添加
df.groupby(['BldgID','BldgHt','Device'])['Date'].count()
下面的soloution适合我。让我们先生成您的数据:
df = pd.DataFrame({'BldgID': [108, 108, 108, 108, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104], 'BldgHt': [28, 28, 28, 28, 36, 36, 41, 41, 41, 41, 41, 41, 45, 45], 'Device': [760, 760, 760, 760, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758], 'Date': ['2018/9/18', '2018/10/5', '2018/10/18', '2018/10/19', '2018/10/2', '2018/11/2', '2018/9/13', '2018/10/3', '2018/10/16', '2018/10/25', '2018/11/3', '2018/11/7', '2018/10/3', '2018/11/3',]})
df['Date'] = df['Date'].apply(lambda x: pd.to_datetime(x))
现在,您可以执行以下操作:
df2 = df.groupby(['BldgID', 'BldgHt', 'Device'])['Date'].nunique()
其中:
print(df2)
BldgID BldgHt Device
104 36 758 2
41 758 6
45 758 2
108 28 760 4
编辑:
如果您想按照问题中的指定重命名该列,可以按如下方式实现:
df2 = df2.reset_index(drop=False).rename(columns={'Date': 'Total_count'})
或者更优雅地说:
df2 = df2.reset_index(name='Total_count')
下面的soloution适合我。让我们先生成您的数据:
df = pd.DataFrame({'BldgID': [108, 108, 108, 108, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104], 'BldgHt': [28, 28, 28, 28, 36, 36, 41, 41, 41, 41, 41, 41, 45, 45], 'Device': [760, 760, 760, 760, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758], 'Date': ['2018/9/18', '2018/10/5', '2018/10/18', '2018/10/19', '2018/10/2', '2018/11/2', '2018/9/13', '2018/10/3', '2018/10/16', '2018/10/25', '2018/11/3', '2018/11/7', '2018/10/3', '2018/11/3',]})
df['Date'] = df['Date'].apply(lambda x: pd.to_datetime(x))
现在,您可以执行以下操作:
df2 = df.groupby(['BldgID', 'BldgHt', 'Device'])['Date'].nunique()
其中:
print(df2)
BldgID BldgHt Device
104 36 758 2
41 758 6
45 758 2
108 28 760 4
编辑:
如果您想按照问题中的指定重命名该列,可以按如下方式实现:
df2 = df2.reset_index(drop=False).rename(columns={'Date': 'Total_count'})
或者更优雅地说:
df2 = df2.reset_index(name='Total_count')
检查第二个答案。是否需要
计数
或每组的唯一值数?谢谢。是的,第二个ans是我想要的。那么正确的答案是bexi
answer。检查第二个答案。您需要count
还是每组唯一值的数量?谢谢。是的,第二个答案是我想要的。那么正确的答案是bexi
回答。谢谢。顺便说一句,只需将.reset_index()添加到第二个ans,它将提供与您相同的ans。排序和大小()的好处是什么。你能告诉我吗?默认情况下,排序是True
,因此如果不设为false,数据的顺序和输出将不同size()
包括NaN值,count()
不包括:谢谢。顺便说一句,只需将.reset_index()添加到第二个ans,它将提供与您相同的ans。排序和大小()的好处是什么。你能告诉我吗?默认情况下,排序是True
,因此如果不设为false,数据的顺序和输出将不同size()
包括NaN值,count()
不包括:谢谢。这就是我想要的。这是一个适合你们给定样品的答案。请注意,如果组中有重复的日期,这将不会给出所需的结果。您的意思是,即使['BldgID'、'BldgHt'、'Device']不同,但'Date'相同,它也不会工作?这可能是个问题。不,我的意思是,如果在相同的['BldgID','BldgHt','Device']
组中,您有两次相同的日期,那么方法count()
将对其进行两次计数。但是你似乎对独特的日期感兴趣,因此它们只应该被计算一次。谢谢。知道了。有一个任务。如果我使用带有第5列(“结果”)的“BldgID,BldgHt,Device”分组,但希望保持第4列“Date”在df中的状态。能做到吗?要使用前3个val分组,然后使用相应的“日期”列。令人困惑的问题?谢谢。这就是我想要的。这是一个适合你们给定样品的答案。请注意,如果组中有重复的日期,这将不会给出所需的结果。您的意思是,即使['BldgID'、'BldgHt'、'Device']不同,但'Date'相同,它也不会工作?这可能是个问题。不,我的意思是,如果在相同的['BldgID','BldgHt','Device']
组中,您有两次相同的日期,那么方法count()
将对其进行两次计数。但是你似乎对独特的日期感兴趣,因此它们只应该被计算一次。谢谢。知道了。有一个任务。如果我使用带有第5列(“结果”)的“BldgID,BldgHt,Device”分组,但希望保持第4列“Date”在df中的状态。能做到吗?要使用前3个val分组,然后使用相应的“日期”列。令人困惑的问题?谢谢。这可能有用。但是我有大约70000个唯一的BldgID号码。非常感谢。您编辑的答案使解决方案成为完整的解决方案。谢谢。这可能有用。但是我有大约70000个唯一的BldgID号码。非常感谢。您编辑的答案使解决方案成为完整的解决方案。