【问题标题】:Add elements from list to new data frame column based on condition根据条件将列表中的元素添加到新数据框列
【发布时间】:2021-08-10 10:55:02
【问题描述】:

我有这个数据框:

id1 id2
2341 qw123
2321 -
- de121
2341 qd111

我想在列表中添加第三列 id3 和随机生成的 id:

['11231', '123141', '234512']

让我感到困难的是如何将列表中相同的随机 id 附加到 id1 相同的每一行。

例如,输出文件应如下所示:

id1 id2 id3
2341 qw123 11231
2321 - 123141
- de121 234512
2341 qd111 11231

感谢任何解决方案!

【问题讨论】:

  • df['id3'] = np.random.choice(yourlist,len(df))
  • @anky 感谢重播,但我需要在id1相同的情况下选择相同的随机id,请再看描述
  • 查看 groupby 的工作原理并创建一个具有相同逻辑的函数以使用 apply 调用

标签: python pandas


【解决方案1】:

您可以创建一个字典,用于将唯一的 id1 键映射到随机数。然后使用.map()id1的值映射到这些随机数上,分配给新列id3,如下:

num_list = ['11231', '123141', '234512']
id1_unique = df['id1'].unique()

m_dict = dict(zip(id1_unique,  np.random.choice(num_list, len(id1_unique))))

df['id3'] = df['id1'].map(m_dict)

【讨论】:

  • 感谢这有效,但当id1 列为空时,我还需要添加随机ID。目前,对于每种此类情况,我的代码对于每个 id2 值都有相同的随机 ID。我试图从两列中获取唯一值并使用 applymap 映射它们,但它无法正常工作。您知道如何针对这种情况扩展此代码吗?
  • @Y.C.T 您的 3 个元素列表太小,因此有时您会为不同的 id's 获得相同的值尝试创建更大的列表以获得更好的随机性。由于您必须为相同的 id 分配相同的编号,因此算法在某种意义上必须依赖 id。因此,即使使用 groupby(),当您对空项目进行分组时,您也无法获取数字。
  • @Y.C.T 对于依赖两列的情况,如果没有一些示例数据,我无法完全了解您想要做什么。我建议您发布另一个问题,其中包含一些您想要对 2 列和空 ID 执行的操作的示例。最好将多个问题分解为不同的问题,否则人们可能会关闭您的问题,指出您的问题没有重点。
  • @Y.C.T 无论如何,如果根据您最初的问题范围对您有用,请接受此问题的解决方案。如果可以的话,我会进一步研究你的新问题。
猜你喜欢
  • 2022-10-14
  • 1970-01-01
  • 2018-02-08
  • 2020-05-22
  • 2020-08-22
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多