python - 将包含元组列表的列转换为多列

标签 python list pandas tuples

我有一个数据框,其中一列包含不均匀的元组列表。元组的长度都相同,只是列表不均匀。我想在框架内融化这一列,以便新列将附加到现有列,并且行将被复制。就像这样:

df
   name     id       list_of_tuples
0  john doe    abc-123  [('cat',100,'xyz-123'),('cat',96,'uvw-456')]
1  bob smith    def-456  [('dog',98,'rst-789'),('dog',97,'opq-123'),('dog',95,'lmn-123')]
2  bob parr    ghi-789  [('tree',100,'ijk-123')]

df_new
   name            id       val_1 val_2 val_3
0  john doe        abc-123  cat   100   xyz-123
1  john doe        abc-123  cat   96    uvw-456
2  bob smith       def-456  dog   98    rst-789
3  bob smith       def-456  dog   97    opq-123
4  violet parr     def-456  dog   95    lmn-123
5  violet parr     ghi-789  tree  100   ijk-123

对于我当前的方法,我正在创建一个新的数据帧,其中使用 itertools 的链功能,但我想摆脱创建整个其他数据帧并将其合并回“id”列的情况。

这是我当前的代码:

df_new = pd.DataFrame(list(chain.from_iterable(df.matches)),columns=['val_1','val_2','val_3']).reset_index(drop=True)
df_new['id'] = np.repeat(df.id.values, df['list_of_tuples'].str.len()) 

最佳答案

解除列表的嵌套,然后我们concat

s=df.list_of_tuples
pd.concat([pd.DataFrame({'id':df.id.repeat(s.str.len())}).reset_index(drop=True),pd.DataFrame(np.concatenate(s.values))],axis=1)
Out[118]: 
        id     0    1        2
0  abc-123   cat  100  xyz-123
1  abc-123   cat   96  uvw-456
2  def-456   dog   98  rst-789
3  def-456   dog   97  opq-123
4  def-456   dog   95  lmn-123
5  ghi-789  tree  100  ijk-123

关于python - 将包含元组列表的列转换为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51030465/

相关文章:

python - 在 python 假设中禁用 NonInteractiveExampleWarning

Prolog 中的阶乘列表

Python/ Pandas : Dataframe subset by filter criteria

python - 添加到列而不创建 NaN 值

python - 取消透视数据框并加入 Pandas

python - 如何找到Python中MemoryError的来源?

Python 类到 Yaml/JSON

python - 将多个excel文件导入python pandas并将它们连接到一个数据帧中

algorithm - 查找由两个列表形成的产品集

python - 在 python 列表中查找元组中的唯一元素