Как заполнить фрейм данных значениями из файла
Я создал фрейм данных с именами столбцов и строк. Например
a b c d
1 Nan Nan Nan Nan
2 Nan Nan Nan Nan
3 Nan Nan Nan Nan
Теперь я хочу заполнить фрейм данных значениями из файла tsv. Мой файл выглядит следующим образом:
1 b 80
2 c 90
3 a 60
Чтобы создать это
a b c d
1 Nan 80 Nan Nan
2 Nan Nan 90 Nan
3 60 Nan Nan Nan
Могу ли я использовать панды, чтобы заполнить фрейм данных значениями из моего файла? Итак, я хочу, чтобы python искал нужную строку и столбец и поместил туда свое значение. Заранее спасибо!
1 ответ
Решение
Я думаю тебе нужно pivot
с reindex
:
df1 = pd.DataFrame(index=[1,2,3], columns=list('abcd'))
print (df1)
a b c d
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
print (df2)
A B C
0 1 b 80
1 2 c 90
2 3 a 60
df = df2.pivot(index='A', columns='B', values='C') \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 80.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
Альтернативное решение с unstack
:
df = df2.set_index(['A','B'])['C'].unstack() \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 80.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
Если дублирует в A
а также B
использование pivot_table
с некоторой агрегатной функцией, такой как mean
:
print (df2)
A B C
0 1 b 80 <-duplicates for same A, B
1 1 b 100 <-duplicates for same A, B
2 2 c 90
3 3 a 60
df = df2.pivot_table(index='A', columns='B', values='C', aggfunc='mean') \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 90.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
df = df2.groupby(['A','B'])['C'].mean().unstack() \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 90.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN