Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. df=pd.DataFrame(data=[[301,301,302,303],[['a'],['b','c'],['e','f',33,'Z'],42],index=['id','foo']).T
  2.  
  3. id foo
  4. 0 301 [a]
  5. 1 301 [b, c]
  6. 2 302 [e, f,33,'Z']
  7. 3 303 42
  8.  
  9. id foo
  10. 0 301 a
  11. 1 301 b
  12. 1 301 c
  13. 2 302 e
  14. 2 302 f
  15. 2 302 33
  16. 2 302 Z
  17. 3 303 42
  18.  
  19. df['foo'] = [x if isinstance(x, list) else [x] for x in df['foo']]
  20.  
  21. from itertools import chain
  22.  
  23. df = pd.DataFrame({
  24. 'id' : df['id'].repeat(df['foo'].str.len()),
  25. 'foo' : list(chain.from_iterable(df['foo'].tolist()))
  26.  
  27. })
  28. print (df)
  29. id foo
  30. 0 301 a
  31. 1 301 b
  32. 1 301 c
  33. 2 302 e
  34. 2 302 f
  35. 2 302 33
  36. 2 302 Z
  37. 3 303 42
  38.  
  39. df.set_index('id')['foo'].apply(pd.Series).stack().reset_index(name='foo').drop('level_1', axis=1)
  40.  
  41. id foo
  42. 0 301 a
  43. 1 301 b
  44. 2 301 c
  45. 3 302 e
  46. 4 302 f
  47. 5 302 33
  48. 6 302 Z
  49. 7 303 42
  50.  
  51. id test foo
  52. 0 301 1 [a]
  53. 1 301 2 [b, c]
  54. 2 302 3 [e, f, 33, Z]
  55. 3 303 4 42
  56.  
  57. df.set_index(['id','test'])['foo'].apply(pd.Series).stack().reset_index(name='foo').drop('level_2', axis=1)
  58.  
  59. id test foo
  60. 0 301 1 a
  61. 1 301 2 b
  62. 2 301 2 c
  63. 3 302 3 e
  64. 4 302 3 f
  65. 5 302 3 33
  66. 6 302 3 Z
  67. 7 303 4 42
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement