メソッドを使用して、いくつかの行エントリを列にピボットする Pandas DataFrame があります(この質問unstack()
でアドバイスされているように)。そのためには、ピボットされていない列を使用し、call を呼び出して、本当に必要なデータフレームを取得します。set_index
unstack()
ただし、インデックスの一部の要素が NaN の場合、厄介なエラーが発生します。インデックスに重複したエントリがあると言われることがありますが (これは正しくありません)、NaN を整数に変換できないと言われることもあります。ここに例があります
import pandas
from numpy import nan
df = pandas.DataFrame(
{'agent': {
17263: 'Hg',
17264: 'U',
17265: 'Pb',
17266: 'Sn',
17267: 'Ag',
17268: 'Hg'},
'change': {
17263: nan,
17264: 0.0,
17265: 7.070e-06,
17266: 2.3614e-05,
17267: 0.0,
17268: -0.00015},
'dosage': {
17263: nan,
17264: nan,
17265: nan,
17266: 0.0133,
17267: 0.0133,
17268: 0.0133},
's_id': {
17263: 680585148,
17264: 680585148,
17265: 680585148,
17266: 680607017,
17267: 680607017,
17268: 680607017}}
)
try:
dupe = df.copy().set_index(['s_id','dosage','agent'])
badDupe = dupe.unstack()
except Exception as e:
print( 'Error with all data was: %s'%(e,) )
try:
getnan = df.ix[17264:].copy().set_index(['s_id','dosage','agent'])
badNan = getnan.unstack()
except Exception as e:
print( 'Error dropping first entry was: %s'%(e,) )
df.dosage[:3]=42
willWork = df.copy().set_index(['s_id','dosage','agent'])
u = willWork.unstack()
print(u)
その出力は
Error with all data was: Index contains duplicate entries, cannot reshape
Error dropping first entry was: cannot convert float NaN to integer
change
agent Ag Hg Pb Sn U
s_id dosage
680585148 42.0000 NaN NaN 0.000007 NaN 0
680607017 0.0133 0 -0.00015 NaN 0.000024 NaN
ご覧のとおり、dose を NaN (ここでは 42) 以外に設定すると、再形成操作は正常に機能します。
私が求める再形成されたデータフレームを取得する最良の方法は何ですか? 投与量にセンチネル値を入れて、後で代用する必要がありますか? それは…エレガントではないようです。