<pandas, Python> 条件にあった行を削除する。

条件conditionにあった行Rowを削除dropする。

まずは、お見本データフレームDataFrame作成。

In [54]: data='''
    ...: 1 2 3 4 5
    ...: a b c d e
    ...: f g h i j
    ...: k l m n o
    ...: '''

In [55]: df = pd.read_table(io.StringIO(data), sep=' ')

In [56]: df
Out[56]: 
   1  2  3  4  5
0  a  b  c  d  e
1  f  g  h  i  j
2  k  l  m  n  o

で、行のドロップ。
インデックスindexで指定すればよし。

In [58]: df.drop(1)
Out[58]: 
   1  2  3  4  5
0  a  b  c  d  e
2  k  l  m  n  o

In [59]: df.drop([1])
Out[59]: 
   1  2  3  4  5
0  a  b  c  d  e
2  k  l  m  n  o

で、列columnの場合はaxis=1を指定。

In [61]: df.drop(['1'], axis=1)
Out[61]: 
   2  3  4  5
0  b  c  d  e
1  g  h  i  j
2  l  m  n  o

あとは、条件にあった行を見つける。

In [65]: df[['1', '3']].apply(lambda x: True if x[0] == 'f' and x[1] == 'h' else False, axis=1)
Out[65]: 
0    False
1     True
2    False
dtype: bool

In [66]: j = df[['1', '3']].apply(lambda x: True if x[0] == 'f' and x[1] == 'h' else False, axis=1)

In [67]: j
Out[67]: 
0    False
1     True
2    False
dtype: bool

で、True/Falseのリストをデータフレームに突っ込めばオッケー。

In [68]: df[j]
Out[68]: 
   1  2  3  4  5
1  f  g  h  i  j

が、、、こんな難しいことせんでも下記でよかった。。。

In [78]: df[(df['1'] == 'f') & (df['3'] == 'h')]
Out[78]: 
   1  2  3  4  5
1  f  g  h  i  j

<mermaid> 後追いで、マーメイドの絵を出す。

JQuery.ajax()とかで、後追いで、マーメイドmermaidのソースsourceを読んで絵を作る方法。

mermaid.init()をする。 うまくいった! すばらしい。

jsfiddleで遊んでみた。
https://jsfiddle.net/3hx9ag6m/2/

すっごくお世話になったところ。助かりました。(vv)
naosim.hatenablog.jp

マニュアル。
https://mermaidjs.github.io/usage.html

<Python> アルファベットのリストを作る。

chr()アスキーコードを入れればOK! 逆は、ord()だよーん。

In [61]: [chr(i) for i in range(65,65+26)]
Out[61]: 
['A',
 'B',
 'C',
 :
'X',
 'Y',
 'Z']

In [62]: a = [chr(i) for i in range(65,65+26)]

In [63]: [ord(i) for i in a]
Out[63]: 
[65,
 66,
 67,
 68,
:
 88,
 89,
 90]

参考にさせてもらいました。
hetapy.hatenablog.com

アスキーコード表。
http://www.k-cube.co.jp/wakaba/server/ascii_code.html

<pandas, Python> ふたつのカラムの値でソートする。

2つ、ふたつのカラムcolumnの値でソートsortする。

In [58]: df = pd.DataFrame({'a':[2,2,1,1,1],'b':[2,1,3,1,2],'c':['a','b','c','d','e']})

In [59]: df
Out[59]: 
   a  b  c
0  2  2  a
1  2  1  b
2  1  3  c
3  1  1  d
4  1  2  e

In [60]: df.sort_values(['a','b'], ascending=[True, True], inplace=False)
Out[60]: 
   a  b  c
3  1  1  d
4  1  2  e
2  1  3  c
1  2  1  b
0  2  2  a

inplace=Trueにすると、データフレームDataFrameの中身をソートしたもので置き換える。

いつものスタックオーバーフロー。
stackoverflow.com

<pandas, Python> カラムの値を比較して、同じ値の行を抽出する。

カラムcolumnの値を比較して、同じ値の行rowを抽出する。 対象のカラムを選択して、apply()をして、その中で、lambda関数で文字列比較処理をすればいい。

In [7]: df = pd.DataFrame({'a':[1,2,3,4,5],'b':[1,4,6,8,10],'c':[5,7,8,9,10]})

In [8]: df
Out[8]: 
   a   b   c
0  1   1   5
1  2   4   7
2  3   6   8
3  4   8   9
4  5  10  10

In [37]: df['e'] = df[['a','b']].apply(lambda x: 'hage!' if x[0] == x[1] else 'hige.', axis=1)

In [38]: df
Out[38]: 
   a   b   c      e
0  1   1   5  hage!
1  2   4   7  hige.
2  3   6   8  hige.
3  4   8   9  hige.
4  5  10  10  hige.

過去記事が役にたった。よかった。よかった。
nekoyukimmm.hatenablog.com

<mermaid> マーメイドにリンクを埋め込む

マーメイドmermaidで作った絵に、リンクlinkを埋め込む。

click行を追加すればオッケー。 下記、例。

<h2>mermaid in html</h2>
<div class='mermaid'>
    graph TD;
    subgraph box
    A(Start)-->B(Do some stuff)
    B(Take some rest)-->C(do more)
    click B "http://www.yahoo.co.jp" "This is a link"
    end
</div>

1つ問題が。 clickで指定する要素名(この場合は、B)は、1文字しかだめ。
2文字にすると、リンクの埋め込みがうまく動かない。

いつもお世話になってる、スタックオーバーフロー。
stackoverflow.com