我有一個 .csv 輸出,指示一天中每張票的確認時間。我正在嘗試確認每個人每天的總票數。以下是實際行數為 1000 的示例資料:
Date_Created,Confirmed_By
4/6/2022 10:35,Bob
4/6/2022 11:39,Bob
4/6/2022 12:19,Tim
4/7/2022 7:08,Bob
4/7/2022 7:30,Sally
4/7/2022 7:35,Bob
4/8/2022 8:09,Sally
4/8/2022 8:28,Jack
4/8/2022 8:40,Jack
4/8/2022 10:00,Sally
4/8/2022 10:23,Jack
我希望看到一個表格,其中第一列是日期串列,后續列是名稱,每個關聯日期的總確認數:
| 日期 | 鮑勃 | 蒂姆 | 杰克 | 莎莉 |
|---|---|---|---|---|
| 2022-04-06 | 2 | 1 | 0 | 0 |
| 2022-04-07 | 2 | 0 | 0 | 1 |
| 2022-04-08 | 0 | 0 | 3 | 2 |
我嘗試將 csv 拉入資料框并使用 value_counts() 為個人創建系列,但我永遠不會 100% 了解名稱,因為我們會有不計入的隨機填充。
Bob = df[df["Confirmed By"].str.contains("Bob")]
Bob_Days = Bob["Date_Confirmed"].value_counts().rename("Bob")
conf_per_day = pd.concat(
[Bob_Days, Tim_Days, Jack_Days, Sally_Days], axis=1
)
然后我嘗試了df.value_count().to_frame('counts').reset_index()一個在單獨的行上給出日期、名稱和總數的方法,但無法弄清楚如何在沒有重復日期的情況下將這些名稱旋轉到列中。對每人每天的確認總數有什么想法嗎?
uj5u.com熱心網友回復:
利用crosstab
>>> pd.crosstab(df['Date_Created'].dt.date, df['Confirmed_By'])
Confirmed_By Bob Jack Sally Tim
Date_Created
2022-04-06 2 0 0 1
2022-04-07 2 0 1 0
2022-04-08 0 3 2 0
uj5u.com熱心網友回復:
我會做這樣的事情:
import pandas as pd
df = pd.read_csv('your_test_data.csv')
# create date column
df['Date'] = pd.to_datetime(df['Date_Created']).dt.date
# pivot table with counting
result = df.pivot_table(index='Date', columns='Confirmed_By', aggfunc='count').fillna(0)
uj5u.com熱心網友回復:
一種可能的方法是使用resample()and value_counts():
df['Date_Created'] = pd.to_datetime(df['Date_Created'])
df.resample('D',on = 'Date_Created')['Confirmed_By'].value_counts().unstack().fillna(0)
輸出:
Confirmed_By Bob Jack Sally Tim
Date_Created
2022-04-06 2.0 0.0 0.0 1.0
2022-04-07 2.0 0.0 1.0 0.0
2022-04-08 0.0 3.0 2.0 0.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/491325.html
標籤:python-3.x 熊猫 数据框
