ここに示すように、パンダのデータフレームがあります。
id pos value sent
1 a/b/c test/test2/test3 21
2 d/a test/test5 21
データフレームが次のようになるように分割(=展開)したいdf['pos']
とdf['token']
思います。
id pos value sent
1 a test 21
1 b test2 21
1 c test3 21
2 d test 21
2 a test5 21
各列を分割してからそれらを連結すると機能しません
pos = df.token.str.split('/', expand=True).stack().str.strip().reset_index(level=1, drop=True)
df1 = pd.concat([pos,value], axis=1, keys=['pos','value'])
何か案は?本当にありがたいです。
編集:
私はここでこのソリューションを使用してみました:https://stackoverflow.com/a/40449726/4219498
しかし、次のエラーが発生します。 TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'
これがどのように発生するかはわかりませんが、これは厄介な問題だと思います。Python2.7.14を使用しています
私はstack
、新しいデータフレームを最初から構築することを支持して、魔法を避ける傾向があります。これは通常、より効率的です。以下は1つの方法です。
import numpy as np
from itertools import chain
lens = list(map(len, df['pos'].str.split('/')))
res = pd.DataFrame({'id': np.repeat(df['id'], lens),
'pos': list(chain.from_iterable(df['pos'].str.split('/'))),
'value': list(chain.from_iterable(df['value'].str.split('/'))),
'sent': np.repeat(df['sent'], lens)})
print(res)
id pos sent value
0 1 a 21 test
0 1 b 21 test2
0 1 c 21 test3
1 2 d 21 test
1 2 a 21 test5
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加