【问题标题】:How can I create a n-m mapping table in python dataframe?如何在 python 数据框中创建一个 n-m 映射表?
【发布时间】:2021-05-24 18:13:47
【问题描述】:

我有一个包含几行和几列的表格。我的表的索引/行是一个类别,如果有一些 id,则在我的表的最后一行。有没有办法在我的表格的每个非空单元格中写入当前列的 ID?

表格(已经在 Pandas 生成的数据框中):

    1     2     3     4     5     6     7     8

9  3161409  50342165  949138  NaN  147466  155307    NaN    3575062  
12 NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
ids m90   v15   o1506   u55   m1701  m174   m90   m90

假设我想在每个不是“NaN”的单元格中都有“m90”。有没有办法做到这一点?

这是所需的输出:

    1     2     3     4     5     6     7     8

9  m90    v15    o1506    NaN   m1701   m174    NaN    m90  
12 NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
ids m90   v15   o1506   u55   m1701  m174   m90   m90

提前致谢。

【问题讨论】:

  • 嗨,你能更准确地描述你的输入数据框是什么以及你的预期输出是什么?这些示例中的每一个都可能对您有所帮助
  • 您好,为了简​​单起见,我的输入数据框由 8 列和 1250 行组成,缩小为 3 行。预期的输出应该是索引为“9”的整行应该替换为索引为“ids”的行的值。这只应在值不是 nan 时发生。
  • 不幸的是,我还不是很清楚。我建议您通过显示您想要的输出应该是什么样子来编辑您的问题(即使只有三行)
  • 我希望我的问题通过编辑后的问题变得更加清晰。谢谢你的打扰。
  • 感谢您提供更准确的信息。我在下面回答了你,请检查一下,看看它是否有效

标签: python pandas dataframe mapping


【解决方案1】:

我们可以创建一个小函数,将pandas.Series 作为输入,并且可以应用于数据框的每一列。

我创建了这个类似于你的玩具数据框

import numpy as np
import pandas as pd

df = pd.DataFrame({
    '1': [123, np.nan, 'm90'],
    '2': [np.nan, np.nan, 'v15'],
    '3': [123445, 4, 'o1506'],
    '4': [np.nan, 23, 'u55']
}, index=[9, 12, 'ids'])

然后

def replace_non_nulls(s):
    # 's' is a series
    replacement = s.loc['ids']
    s.loc[s.notna()] = replacement
    return s

df.apply(replace_non_nulls)
#        1    2      3    4
# 9    m90  NaN  o1506  NaN
# 12   NaN  NaN  o1506  u55
# ids  m90  v15  o1506  u55

【讨论】:

  • 非常感谢!这几天让我很头疼!
  • 不客气!你看,只需添加一个示例输入和所需的输出就可以让问题更容易理解和重现 :)
猜你喜欢
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 2019-06-01
相关资源
最近更新 更多