Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算唯一的日期数以计算ocuurance_Python_Pandas_Date - Fatal编程技术网

Python 计算唯一的日期数以计算ocuurance

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

要查找与一组值对应的唯一日期数。如果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(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号码。非常感谢。您编辑的答案使解决方案成为完整的解决方案。