python - 数据框的元组列表

标签 python python-2.7 dataframe

寻找有关如何解决以下问题的想法:

我有一个数据框,其中我的一列包含如下元组列表:

mydf = pd.DataFrame({ 
        'Field1' : ['A','B','C'],
        'Field2' : ['1','2','3'],
        'WeirdField' :[ 
                      [ ('xxx', 'F1'), ('yyy','F2') ],
                      [ ('asd', 'F3'), ('bla','F4') ],
                      [ ('123', 'F2'), ('www','F5') ]
                      ]
        })

enter image description here

我希望元组第二个位置上的每个元素成为数据框上的一列,对应值在第一个位置上。 对于上面的数据框,这是我所期望的:

enter image description here

列表可以有多个元素(不只是示例中的 2 个),并且元素的数量可以随行变化。

谁能建议如何轻松实现这一目标?

谢谢

最佳答案

首先,我展平了 mydf['WeirdField'] 列,这样我们就可以只看到值和列名,而不必担心包含它们的列表。接下来,您可以使用 itertools.groupby 获取每个“F”列的所有相应值和索引。

import itertools

# Must first sort the list by F column, or groupby won't work                  
flatter = sorted([list(x) + [idx] for idx, y in enumerate(mydf['WeirdField']) 
                  for x in y], key = lambda x: x[1]) 

# Find all of the values that will eventually go in each F column                
for key, group in itertools.groupby(flatter, lambda x: x[1]):
    list_of_vals = [(val, idx) for val, _, idx in group]

    # Add each value at the appropriate index and F column
    for val, idx in list_of_vals:
        mydf.loc[idx, key] = val

产生这个:

In [84]: mydf
Out[84]: 
  Field1 Field2              WeirdField   F1   F2   F3   F4   F5
0      A      1  [(xxx, F1), (yyy, F2)]  xxx  yyy  NaN  NaN  NaN
1      B      2  [(asd, F3), (bla, F4)]  NaN  NaN  asd  bla  NaN
2      C      3  [(123, F2), (www, F5)]  NaN  123  NaN  NaN  www

关于python - 数据框的元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42540558/

相关文章:

python - 如何使用 Zoom 7.2m 三频 USB 调制解调器通过 AT 命令发送短信?

python - 如何在 python 中防止空值

python - 帮助进行数据存储查询

python - 在 Anaconda 中安装 astropy 后出现导入错误 : No module named astropy,

python - NLTK SVM 分类器终止

r - 如何从数据框列表中提取键名

python - 将Python库添加到远程集群机器?

python - 进程在 urllib2 套接字重置时挂起

python - 根据两个 pandas DataFrame 之间的条件为新列分配值

python - Pandas:更快地将字符串元组列表转换为数据帧?