max_date = datetime.today().strftime('%d-%m-%Y')
min_date = "06-08-2021"
我有一個看起來像這樣的df。目前它只有 1 行:
name value
Name1 23
然后我有另一個資料集df2,如下所示:
date group
07-08-2021 A
07-08-2021 A
06-08-2021 A
09-08-2021 A
07-08-2021 A
07-08-2021 B
06-08-2021 B
03-08-2020 A
我想遍歷 and 的所有行,df2如果日期在 and 的范圍內min_date,max_date我想做 A 和 B 的所有出現的累積和。
這意味著我想計算特定組型別在該范圍內出現的次數。然后我想將該值添加到我的第一個資料集中。像這樣的東西:
name value count_A count_B
Name1 23 5 2
注意最后一行:
03-08-2020 A
不計算在內,因為日期不在范圍內。
編輯:樣本df:
details = {
'Name' : ['Name1'],
'Value' : [23],
}
df1 = pd.DataFrame(details)
details = {
'Date' : ['07-08-2021', '07-08-2021', '06-08-2021', '09-08-2021','07-08-2021','07-08-2021','06-08-2021','03-08-2020'],
'Group' : ['A', 'A', 'A', 'A','A','B','B','A'],
}
df2 = pd.DataFrame(details)
uj5u.com熱心網友回復:
details = {
'Date' : ['07-08-2021', '07-08-2021', '06-08-2021', '09-08-2021','07-08-2021','07-08-2021','06-08-2021','03-08-2020'],
'Group' : ['A', 'A', 'A', 'A','A','B','B','A'],
}
details1 = {
'Name' : ['Name1'],
'Value' : [23],
}
df1 = pd.DataFrame(details1)
df = pd.DataFrame(details)
max_date = datetime.today().strftime('%d-%m-%Y')
min_date = "06-08-2021"
df = df[(df['Date'] <= max_date) & (df['Date'] > min_date)]
df = df.groupby('Group').count()
df1_transposed = df.T
df1_transposed = df1_transposed[['A', 'B']]
df1_transposed = df1_transposed.reset_index()
df1 = pd.merge(df1, df1_transposed, left_index=True, right_index=True)
df1 = df1[['Name', 'Value', 'A', 'B']]
df1.rename(columns = {'A':'count_A', 'B':'count_B'}, inplace = True)
print(df1)
輸出
Name Value count_A count_B
Name1 23 4 1
uj5u.com熱心網友回復:
解決方案
創建一個布爾掩碼來過濾 和 之間的行min_date,max_date然后value_counts對過濾后的行執行 a 并將assign結果df1
m = df2['Date'].between(min_date, max_date)
df1.assign(**df2.loc[m, 'Group'].value_counts().add_prefix('count_'))
Name Value count_A count_B
0 Name1 23 5 2
uj5u.com熱心網友回復:
最好使用datetime.date物件而不是字串:
from datetime import date
max_date = date.today()
min_date = date(2021,8,6)
如果 df2 中的日期是字串,您可以先將它們轉換為datetime.date物件,同時遍歷所有行:
# example for first iteration of df2
from datetime import date
# iterate over all dates in your df2 and include the following:
dash_date = '07-08-2021'
py_date = datetime.strptime(dash_date, '%d-%m-%Y').date()
# check if date of current iteration is between max_date and min_date
py_date > min_date and py_date < max_date
根據比較,您可以決定是否要將值添加到您的第一個資料集。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/491205.html
