Создать объединенный столбец и столбец индекса из 2 одинаковых столбцов - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть DataFrame, который выглядит следующим образом: {"Val1": [...], "Val2": [...]} То, что я сейчас хочу достичь, это DataFrame, который выглядит следующим образом:

{
    "Vals": [<should contain all vals from Val1 and Val2>], 
    "type": [<1 or 2 depending on the column from which 
              the corresponding value originated>]
}

Я мог бы сгенерировать это, например:

new = DataFrame({"vals": old.vals1.values + old.vals2.values,
                 "type": ([1] * len(old)) + ([2] * len(old))})

Но это выглядит очень странно, и мне интересно, есть ли элегантный однострочник, использующий метод панд.Потому что в моей реальной проблеме таблица имеет еще 4 столбца, и тогда мои хакерские решения становятся довольно интенсивными при наборе текста.

РЕДАКТИРОВАТЬ: конкретный пример будет:

old = pd.DataFrame({"A": [2, 4, 5], "B": [1, 2, 3], "C":[4, 5, 6]})
new = pd.DataFrame({"A": [2, 4, 5, 2, 4, 5], "B and C": [1, 2, 3, 4, 5, 6], "type": (["B"] * 3) + (["C"] * 3)})

old:

    A   B   C
0   2   1   4
1   4   2   5
2   5   3   6

new:
    A   B and C     type
0   2   1           B
1   4   2           B
2   5   3           B
3   2   4           C
4   4   5           C
5   5   6           C

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018
import pandas as pd
datadict = {
        'Val1': [1,3,5,7,9],
        'Val2': [2,4,6,8,10],
        }

df = pd.DataFrame(datadict)

df = pd.melt(df,var_name='Val')
print (df)  
    Val  value
0  Val1      1
1  Val1      3
2  Val1      5
3  Val1      7
4  Val1      9
5  Val2      2
6  Val2      4
7  Val2      6
8  Val2      8
9  Val2     10
0 голосов
/ 14 декабря 2018

Скажем, у вас есть:

df = pd.DataFrame({'val1':[1,2,3,4],'val2':[5,6,7,8]})

Используя pd.melt(), вы получите то, что хотите:

df.melt(var_name='Type', value_name='vals')
      Type    vals
0     val1      1
1     val1      2
2     val1      3
3     val1      4
4     val2      5
5     val2      6
6     val2      7
7     val2      8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...