как назначить count () переменной - PullRequest
0 голосов
/ 05 октября 2019

Мне нужно хранить даты и количество () в кадре данных. Я думаю, что я сделал это в своем коде, но я не могу получить доступ к count (), чтобы назначить его переменной. В конечном счете, моя цель - сгруппировать по числу, скажем, 2, и поместить только даты с count () = 2 в отдельный фрейм данных для обработки.

Я искал и не нашел способа получить доступ к count ()чтобы иметь возможность изолировать его и назначить ему переменную. спасибо

from datetime import date
from datetime import datetime
import pandas as pd
import sqlite3
import numpy as np
#conn = sqlite3.connect('data3.db')
from sqlalchemy import create_engine
engine = create_engine('sqlite:///C:\data3.db', echo=False)



#create_local table()
name = 'Bob'
startDate = pd.to_datetime('10/02/2019').date()
endDate = pd.to_datetime('10/09/2019').date()
d = pd.date_range(start=startDate, end=endDate, freq='D')

dd = pd.DataFrame({'Date': d, 'Name':[name]*len(d)})
#print (dd)

df1 = pd.DataFrame(dd, columns =['Date'])
#print(df1)

# PUll data from database
#query = "select Date from testtablee"
#df = pd.read_sql_query(query, engine)
dates= {'Date':['2019-10-07','2019-10-06','2019-11-03','2019-11-02','2019-10-09','2019-10-08','2019-10-07','2019-10-06','2019-10-05','2019-10-04','2019-10-03','2019-10-02']}
df=pd.DataFrame(dates)
df['Date']=df['Date'].astype(str)
df['Date']=df['Date'].str.slice(0,10)

#create column and count
df2 = pd.DataFrame(df, columns = ['Date'])
#counts = df2['Date'].value_counts()
#df2.columns = ['Date','count']
#df2['count']=df2.groupby('Date')['Date'].transform('count')
df2= df2.groupby("Date").agg({"Date": np.sum, "Date": pd.Series.count})
print (df2)
# extract the dates with 2 counts into new dataframe

'''
df1['Date']=df2['Date']
df1['dateMatch']=np.where(df1.Date == df2.Date, 'True', 'False')
print (df1)
'''
# Write to the database

#dd.to_sql(name='testtablee', con=engine, if_exists='append')
#engine.execute("SELECT * FROM testtablee").fetchall()

мой ожидаемый результат - иметь фрейм данных только с датами, которые имеют более 2 вхождений или значений.

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Попробуйте создать свою группу следующим образом:

df2 = df2.groupby("Date")["Date"].agg(["count"])

Затем отфильтруйте результаты, где count == 2:

df3 = df2.loc[df2['count'] == 2]
print (df3)

Результаты:

2019-10-06      2
2019-10-07      2

Изменить: Вы можете превратить указатель в столбец следующим образом:

df3['Date'] = df3.index

, а затем отбросить индекс даты, который вы хотели бы:

df3 = df3.reset_index(drop=True)

Окончательные результаты:

   count        Date
0      2  2019-10-06
1      2  2019-10-07
0 голосов
/ 05 октября 2019

Я думаю, что это решает мою проблему. Позже я сравню df1 с df2 для дубликатов и отклоню df1, если истина.

from datetime import date
from datetime import datetime
import pandas as pd
import sqlite3
import numpy as np
from sqlalchemy import create_engine
engine = create_engine('sqlite:///C:\\\\\data3.db', echo=False)



#create_local table()
name = 'Bob'
startDate = pd.to_datetime('10/02/2019').date()
endDate = pd.to_datetime('10/09/2019').date()
d = pd.date_range(start=startDate, end=endDate, freq='D')
dd = pd.DataFrame({'Date': d, 'Name':[name]*len(d)})
#print (dd)

df1 = pd.DataFrame(dd, columns =['Date'])


# PUll data from database
dates= {'Date':['2019-10-07','2019-10-06','2019-11-03','2019-11-02','2019-10-09','2019-10-08','2019-10-07','2019-10-06','2019-10-05','2019-10-04','2019-10-03','2019-10-02']}
df=pd.DataFrame(dates)
df['Date']=df['Date'].astype(str)
df['Date']=df['Date'].str.slice(0,10)

#create column and count
df2 = pd.DataFrame(df, columns = ['Date'])
df2= df2.groupby("Date").agg({"Date": np.sum, "Date": pd.Series.count}).rename(columns={'Date': 'count'})

# extract the dates with 2 counts into new dataframe
df2=df2.loc[df2['count'] == 2]
print (df2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...