dataframe がないので、適当な配列を2つ用意しました。
yeardiffs = [2000, 1992, 2010, 2002]
country_names = ['Japan', 'America', 'France', 'British']
1. zip で2つのリストの要素をタプルにして、iterate する。
zip(yeardiffs, country_names)
[(2000, 'Japan'), (1992, 'America'), (2010, 'France'), (2002, 'British')]
2. 降順ソートする。
sorted(zip(yeardiffs, country_names))
[(1992, 'America'), (2000, 'Japan'), (2002, 'British'), (2010, 'France')]
*sorted(zip(yeardiffs, country_names))
3. * でタプルのリストを引数に展開する。
(1992, 'America'), (2000, 'Japan'), (2002, 'British'), (2010, 'France')
4. それを zip に渡すことで、次のようになる。
zip(*sorted(zip(yeardiffs, country_names)))
(1992, 2000, 2002, 2010)
('America', 'Japan', 'British', 'France')
5. タプルをリストにする。
(list(x) for x in zip(*sorted(zip(yeardiffs, country_names))))
((1992, 2000, 2002, 2010), ('America', 'Japan', 'British', 'France'))
追記
やってることはソートして値を取り出すということだと思いますが、コードが冗長で何をやっているのかわかりづらいです。
パット見で理解できないコードを書くのは避けたほうがよいかと思います。
pandas であれば、以下のようにすればよいと思います。
python
1import pandas as pd
2
3data = [[2000, 'Japan'],
4 [2000, 'America'],
5 [2010, 'British'],
6 [2002, 'France']]
7df = pd.DataFrame(data, columns=['Year', 'Contry'])
8
9# ソートした上で取り出す。
10s_df = df.sort_values(['Year', 'Contry'])
11print(s_df.Year.values)
12# [2000 2000 2002 2010]
13print(s_df.Contry.values)
14# array(['America', 'Japan', 'France', 'British'], dtype=object)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/05 09:39