【问题标题】:How to I turn a column of lists into a set with pandas?如何将一列列表变成带有熊猫的集合?
【发布时间】:2019-10-02 14:37:02
【问题描述】:

我在下面有一个数据框,其中包含每行的列表的“样本”列。我想把这些变成一套。我的预期输出将是“样本”列中的每一行,因为它已变成一个集合,因此不包含任何重复项。有什么想法吗?

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'trial_num': [1, 2, 3, 1, 2, 3],
     'subject': [1, 1, 1, 2, 2, 2],
     'samples': [list(np.random.randn(3).round(2)) for i in range(6)]
    }
)

预期输出如下:

   trial_num  subject               samples
0          1        1   {0.75, 0.87, -0.54}
1          2        1   {-0.67, 1.5, -0.46}
2          3        1  {0.13, -0.56, -0.11}
3          1        2   {-0.78, 0.48, 1.03}
4          2        2   {0.13, 0.62, -0.14}
5          3        2   {0.61, -0.59, 0.43}

【问题讨论】:

  • df.join(pd.DataFrame(df.samples.tolist(),index=df.index)) 这是转换为数据帧,df['samples'] = df['samples'].map(set),这是设置
  • 你能提供一个小的预期输出吗? WeNYoBen 和 Quang 描述了多种方式。您期待哪种输出?
  • df['samples'] = df['samples'].map(set) 是我需要的。多谢你们!添加了预期的输出。
  • @WeNYoBen 有没有办法避免将 {set} 放在空白的样本列中?
  • @acodejdatam 我已经添加了解决方案,使用 np,where

标签: python pandas list set


【解决方案1】:

IIUC

df['New']=np.where(df.samples=='','',df.samples.map(set))
df
Out[312]: 
   trial_num  subject               samples                   New
0          1        1   [-0.96, -0.3, 1.03]   {-0.96, 1.03, -0.3}
1          2        1   [1.24, -0.04, 0.33]   {-0.04, 1.24, 0.33}
2          3        1                                            
3          1        2    [-0.46, 0.1, 1.34]    {-0.46, 1.34, 0.1}
4          2        2   [-0.8, -0.63, 0.16]   {-0.8, -0.63, 0.16}
5          3        2  [0.88, -0.27, -0.72]  {0.88, -0.27, -0.72}

【讨论】:

    猜你喜欢
    • 2019-01-17
    • 2022-01-01
    • 2022-12-10
    • 2017-08-12
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多