回答編集履歴

2

d

2019/03/04 05:02

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -59,3 +59,77 @@
59
59
  Name: nDetections, dtype: int64
60
60
 
61
61
  ```
62
+
63
+
64
+
65
+
66
+
67
+ ## 追記
68
+
69
+
70
+
71
+ > 該当する行を丸々抽出したいという場合はどうしたら良いでしょうか。
72
+
73
+
74
+
75
+ 1. 列 nDetections が大きい順にならべる。
76
+
77
+ `df.sort_values(['nDetections'], ascending=False)`
78
+
79
+
80
+
81
+ 2. 列 ra, dec の値が同じものは削除する。
82
+
83
+ `drop_duplicates(['ra', 'dec'])`
84
+
85
+
86
+
87
+ drop_duplicates() のデフォルト引数が keep='first' なので、列 ra, dec の値が同じ行で列 nDetections の値が一番大きい行が残り、ほかは削除される。
88
+
89
+
90
+
91
+ ```python
92
+
93
+ from io import StringIO
94
+
95
+
96
+
97
+ import pandas as pd
98
+
99
+
100
+
101
+ text = StringIO('''ra dec nDetections test
102
+
103
+ 123.456 5.555 3 a
104
+
105
+ 123.456 5.555 6 b
106
+
107
+ 123.456 5.555 9 c
108
+
109
+ 456.789 6.666 10 d
110
+
111
+ 456.789 6.666 7 e
112
+
113
+ 456.789 6.666 11 f''')
114
+
115
+
116
+
117
+ df = pd.read_csv(text, delim_whitespace=True)
118
+
119
+ extract = df.sort_values(['nDetections'], ascending=False).drop_duplicates(['ra', 'dec'])
120
+
121
+ extract
122
+
123
+ ```
124
+
125
+
126
+
127
+ ```
128
+
129
+ ra dec nDetections test
130
+
131
+ 5 456.789 6.666 11 f
132
+
133
+ 2 123.456 5.555 9 c
134
+
135
+ ```

1

d

2019/03/04 05:01

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -42,6 +42,20 @@
42
42
 
43
43
 
44
44
 
45
- group['nDetections'].max()
45
+ print(group['nDetections'].max())
46
46
 
47
47
  ```
48
+
49
+
50
+
51
+ ```txt
52
+
53
+ ra dec
54
+
55
+ 123.456 5.555 9
56
+
57
+ 456.789 6.666 11
58
+
59
+ Name: nDetections, dtype: int64
60
+
61
+ ```