teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

d

2021/01/19 06:00

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -14,4 +14,35 @@
14
14
  f.write("年月日,カウント\n")
15
15
  for date, c in counts.items():
16
16
  f.write(f"{date},{c}\n")
17
+ ```
18
+
19
+ ## 追記
20
+
21
+ > 因みに存在しない年月日についても”0”としてカウントしたい(上記”2020/1/4,0”のように)のですが、お分かりになりますでしょうか?
22
+
23
+ この条件が入ってくると、結構複雑になるので、pandas に頼ります。
24
+
25
+ ```python
26
+ import pandas as pd
27
+
28
+ df = pd.read_csv("sample.csv", parse_dates=["年月日"])
29
+
30
+ # 月日の一覧
31
+ dates = pd.DataFrame({"年月日": pd.date_range(df["年月日"].min(), df["年月日"].max())})
32
+ # カウントの一覧
33
+ count = df.groupby("年月日").size().to_frame("カウント")
34
+
35
+ # 結合する。
36
+ out_df = dates.merge(count, how="left", on="年月日").fillna(0).convert_dtypes()
37
+ out_df.to_csv("output.csv", index=False)
38
+ ```
39
+
40
+ ```
41
+ 年月日,カウント
42
+ 2020-01-01,2
43
+ 2020-01-02,1
44
+ 2020-01-03,2
45
+ 2020-01-04,0
46
+ 2020-01-05,3
47
+ 2020-01-06,1
17
48
  ```

1

g

2021/01/19 06:00

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -4,14 +4,14 @@
4
4
  from collections import Counter
5
5
 
6
6
  with open("sample.csv") as f:
7
- lines = f.read().splitlines()[1:]
7
+ lines = f.read().splitlines()[1:] # [1:] はヘッダーをスキップするため
8
8
 
9
9
 
10
10
  counts = Counter(lines)
11
11
  print(counts)
12
12
 
13
13
  with open("output.csv", "w") as f:
14
- f.write(f"年月日,カウント\n")
14
+ f.write("年月日,カウント\n")
15
15
  for date, c in counts.items():
16
16
  f.write(f"{date},{c}\n")
17
17
  ```