У меня есть панд DataFrame со структурой, как это:стека два столбца в DataFrame, повторению другие
df = pd.DataFrame([
[ 'foo1', 'a', 'z', 'bar1', 1, 4 ],
[ 'foo2', 'b', 'y', 'bar2', 2, 5 ],
[ 'foo3', 'c', 'x', 'bar3', 3, 6 ]
])
df.columns = [ 'foo', 'let1', 'let2', 'bar', 'num1', 'num2' ]
print(df)
foo let1 let2 bar num1 num2
0 foo1 a z bar1 1 4
1 foo2 b y bar2 2 5
2 foo3 c x bar3 3 6
Я хочу, чтобы сложить столбцы let1
и let2
, и добавить метку рассказывая, откуда они пришли. То же самое для num1
и num2
. В конце концов, я хотел бы добиться этого:
foo let letval bar num numval
0 foo1 let1 a bar1 num1 1
1 foo2 let1 b bar2 num1 2
2 foo3 let1 c bar3 num1 3
3 foo1 let2 z bar1 num2 4
4 foo2 let2 y bar2 num2 5
5 foo3 let2 x bar3 num2 6
До сих пор я сделал это:
let = pd.concat([ df.let1, df.let2 ])
num = pd.concat([ df.num1, df.num2 ])
df = df.drop(['let1', 'let2', 'num1', 'num2' ], axis=1)
df = pd.concat([ df, df ])
df[ 'letval' ] = let
df[ 'numval' ] = num
print(df)
foo bar letval numval
0 foo1 bar1 a 1
1 foo2 bar2 b 2
2 foo3 bar3 c 3
0 foo1 bar1 z 4
1 foo2 bar2 y 5
2 foo3 bar3 x 6
Однако, я уверен, что есть более простой способ достичь этого, не копируя фиктивные переменные и такие обходные пути.
Любые идеи?
часть, которую вы сделали может быть упрощено до 'pd.lreshape (Д.Ф., { 'letval': [ 'let1', 'let2'], 'numval' : ['num1', 'num2']}) '. Это не хорошо документированная функция, поэтому добавление ее в качестве комментария. – ayhan
@ayhan, это идеальное решение - положите его как ответ – MaxU
@MaxU К сожалению, это просто частичное решение, которое сделал Луис. Он теряет колонки let и num. – ayhan