Disjoin pandas dataframes на основе значений столбцов [duplicate]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

22
задан Wizuriel 22 February 2015 в 04:08
поделиться

2 ответа

Вы можете использовать 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 .

64
ответ дан jpp 18 August 2018 в 04:38
поделиться
  • 1
    Год спустя это все еще самый краткий ответ, который я видел в вопросе столбцов на строки. Спасибо! – Moe Chughtai 30 June 2016 в 12:25
  • 2
    @DSM, что бы было обратным для этой функции. т. е. как бы преобразовать df2 [назад] в df – 3kstc 9 March 2018 в 00:02
  • 3
    @ 3kstc Попробуйте здесь или здесь . Вы хотите заглянуть в шарниры. Возможно pandas.pivot_table(df2,values='Value',index=['location','name'],columns='Date').reset_index(). – Teepeemm 9 March 2018 в 19:59

Я предполагаю, что я нашел более простое решение

temp1 = pd.melt(df1, id_vars=["location"], var_name='Date', value_name='Value')
temp2 = pd.melt(df1, id_vars=["name"], var_name='Date', value_name='Value')

Concat whole temp1 с колонкой temp2 name

temp1['new_column'] = temp2['name']

Теперь у вас есть то, что вы попросил.

2
ответ дан Prometheus 18 August 2018 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: