Вы можете использовать pd.melt
, чтобы получить большую часть пути, а затем сортировать:
>>> df
location name Jan-2010 Feb-2010 March-2010
0 A test 12 20 30
1 B foo 18 20 25
>>> df2 = pd.melt(df, id_vars=["location", "name"],
var_name="Date", value_name="Value")
>>> df2
location name Date Value
0 A test Jan-2010 12
1 B foo Jan-2010 18
2 A test Feb-2010 20
3 B foo Feb-2010 20
4 A test March-2010 30
5 B foo March-2010 25
>>> df2 = df2.sort(["location", "name"])
>>> df2
location name Date Value
0 A test Jan-2010 12
2 A test Feb-2010 20
4 A test March-2010 30
1 B foo Jan-2010 18
3 B foo Feb-2010 20
5 B foo March-2010 25
(Возможно, вы захотите выбросить .reset_index(drop=True)
, просто
Примечание: pd.DataFrame.sort
устарел в пользу pd.DataFrame.sort_values
.
Проблема с вашим кодом заключается в том, что next()
ищет элементы одного уровня, но элементы input
не являются элементами одного уровня.
Чтобы сделать то, что вам нужно, через обход DOM, вам нужно получить ближайшего родителя li
от входа .prod
, затем использовать next()
, чтобы получить брата li
, затем find()
для получите вход .categ
, например:
$("input.categ").val("cat");
$("input.prod").closest('li').next('li').find("input").val("dog");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li><input class="prod"></li>
<li><input class="categ">I need "dog" value here</li>
</ul>
Следует отметить, что в этом случае обход DOM скорее спорный, так как вы можете просто выбрать элемент $('.categ')
напрямую, но я предполагаю, что это учебное упражнение.