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

回答編集履歴

2

訂正……

2020/02/14 01:33

投稿

kirara0048
kirara0048

スコア1399

answer CHANGED
@@ -24,43 +24,43 @@
24
24
  df = pd.read_csv(io.StringIO(text))
25
25
  df2 = pd.read_csv(io.StringIO(text2)).fillna(pd.NaT)
26
26
 
27
- df.iloc[:, 0] = pd.to_datetime(df.iloc[:, 0]).dt.strftime('%Y%M').astype(float)
27
+ df.iloc[:, 0] = pd.to_datetime(df.iloc[:, 0]).dt.strftime('%Y%m%d').astype(float)
28
- df2.iloc[:, 0] = pd.to_datetime(df2.iloc[:, 0]).dt.strftime('%Y%M').astype(float)
28
+ df2.iloc[:, 0] = pd.to_datetime(df2.iloc[:, 0]).dt.strftime('%Y%m%d').astype(float)
29
- df2.iloc[:, 1] = pd.to_datetime(df2.iloc[:, 1]).dt.strftime('%Y%M').astype(float)
29
+ df2.iloc[:, 1] = pd.to_datetime(df2.iloc[:, 1]).dt.strftime('%Y%m%d').astype(float)
30
- df2.iloc[:, 2] = pd.to_datetime(df2.iloc[:, 2]).dt.strftime('%Y%M').astype(float)
30
+ df2.iloc[:, 2] = pd.to_datetime(df2.iloc[:, 2]).dt.strftime('%Y%m%d').astype(float)
31
31
 
32
32
  print(df)
33
- # birthday
33
+ # birthday
34
- # 12 191000.0
34
+ # 12 19100101.0
35
- # 9 198000.0
35
+ # 9 19800203.0
36
- # 8 196200.0
36
+ # 8 19620404.0
37
- # 10 194900.0
37
+ # 10 19490406.0
38
38
  print(df2)
39
39
  # high_school university1 university2
40
- # 8 197700.0 198500.0 199900.0
40
+ # 8 19770331.0 19850331.0 19990331.0
41
- # 9 199500.0 NaN NaN
41
+ # 9 19950331.0 NaN NaN
42
- # 10 195400.0 196400.0 NaN
42
+ # 10 19540331.0 19640331.0 NaN
43
43
  ```
44
44
 
45
45
  として、
46
46
 
47
47
  ```Python
48
- result = df2.sub(df['birthday'], 0) // 100
48
+ result = df2.sub(df['birthday'], 0) // 10000
49
49
  print(result.astype('Int64'))
50
50
  # high_school university1 university2
51
- # 8 15 23 37
51
+ # 8 14 22 36
52
52
  # 9 15 <NA> <NA>
53
- # 10 5 15 <NA>
53
+ # 10 4 14 <NA>
54
54
  # 12 <NA> <NA> <NA>
55
55
  ```
56
56
 
57
57
  あるいは、
58
58
 
59
59
  ```Python
60
- result = df2.sub(df['birthday'].reindex(df2.index), 0) // 100
60
+ result = df2.sub(df['birthday'].reindex(df2.index), 0) // 10000
61
61
  print(result.astype('Int64'))
62
62
  # high_school university1 university2
63
- # 8 15 23 37
63
+ # 8 14 22 36
64
64
  # 9 15 <NA> <NA>
65
- # 10 5 15 <NA>
65
+ # 10 4 14 <NA>
66
66
  ```

1

追記

2020/02/14 01:33

投稿

kirara0048
kirara0048

スコア1399

answer CHANGED
@@ -2,4 +2,65 @@
2
2
  DataFrame2.sub(DataFrame1["birthday"], 0)//pd.Timedelta(365, 'D')
3
3
  ```
4
4
 
5
+ ---
6
+
7
+ 追記
8
+
9
+ ```Python
10
+ import io
11
+ import pandas as pd
12
+
13
+ text = """birthday
14
+ 12,'1910-01-01'
15
+ 9,'1980-02-03'
16
+ 8,'1962-04-04'
17
+ 10,'1949-04-06'"""
18
+ text2 = """high_school,university1,university2
19
+ 8,'1977-03-31','1985-03-31','1999-3-31'
20
+ 9,'1995-03-31',,
21
+ 10,'1954-03-31','1964-3-31',
22
+ """
23
+
24
+ df = pd.read_csv(io.StringIO(text))
25
+ df2 = pd.read_csv(io.StringIO(text2)).fillna(pd.NaT)
26
+
27
+ df.iloc[:, 0] = pd.to_datetime(df.iloc[:, 0]).dt.strftime('%Y%M').astype(float)
28
+ df2.iloc[:, 0] = pd.to_datetime(df2.iloc[:, 0]).dt.strftime('%Y%M').astype(float)
29
+ df2.iloc[:, 1] = pd.to_datetime(df2.iloc[:, 1]).dt.strftime('%Y%M').astype(float)
30
+ df2.iloc[:, 2] = pd.to_datetime(df2.iloc[:, 2]).dt.strftime('%Y%M').astype(float)
31
+
32
+ print(df)
33
+ # birthday
34
+ # 12 191000.0
35
+ # 9 198000.0
36
+ # 8 196200.0
37
+ # 10 194900.0
5
- で良いかと思われますが
38
+ print(df2)
39
+ # high_school university1 university2
40
+ # 8 197700.0 198500.0 199900.0
41
+ # 9 199500.0 NaN NaN
42
+ # 10 195400.0 196400.0 NaN
43
+ ```
44
+
45
+ として、
46
+
47
+ ```Python
48
+ result = df2.sub(df['birthday'], 0) // 100
49
+ print(result.astype('Int64'))
50
+ # high_school university1 university2
51
+ # 8 15 23 37
52
+ # 9 15 <NA> <NA>
53
+ # 10 5 15 <NA>
54
+ # 12 <NA> <NA> <NA>
55
+ ```
56
+
57
+ あるいは、
58
+
59
+ ```Python
60
+ result = df2.sub(df['birthday'].reindex(df2.index), 0) // 100
61
+ print(result.astype('Int64'))
62
+ # high_school university1 university2
63
+ # 8 15 23 37
64
+ # 9 15 <NA> <NA>
65
+ # 10 5 15 <NA>
66
+ ```