【问题标题】:Using apply to write to a global Pandas dataframe使用 apply 写入全局 Pandas 数据框
【发布时间】:2016-05-24 22:33:06
【问题描述】:

如果满足来自另一个数据框的条件,我正在尝试创建一个新的数据框,其中添加了值。如果一列不为空,它将应用一个函数,将前面的 90 行写入新数据帧。但是,我在编写当前代码时遇到了许多错误,因为我对应用函数后返回的值有些困惑。

我编写了一个使用 for 循环的代码,但是它需要很长时间才能执行。我希望只用 numpy 和 pandas 编写新代码。

df_regression = pd.DataFrame()

def func(x):
    global df_regression
    a = x.name
    b = x.name - 89

    df_writetoreg = df6_mod[b:a]
    df_regression = df_regression.append(df_writetoreg)
    return df_writetoreg    


df6_mod[pd.notnull(df6_mod['Characters1'])][['Characters1']].apply(lambda x: func(x), axis=1)

****编辑*****

例子:

数据帧 A

  Example      Value      Characters1
    A             10           NA
    A             20           NA
    A             30           1
    A             15           NA
    A             10           NA
    B             10           NA
    B             20           NA
    B             30           NA
    B             15           1
    B             10           NA

因此,在这种情况下,应用该函数后,我想创建一个数据框 B,它的所有值都位于 Characters1 列中的“1”值之前,而不是 3 个值,而是 90。

数据帧 B

  Example      Value      Characters1
    A             10           NA
    A             20           NA
    A             30           1
    B             20           NA
    B             30           NA
    B             15           1

【问题讨论】:

  • 我不清楚你在问什么。另外,我无法通过查看您的代码来确定您的意思。更好的方法是提供示例数据(更好地提供生成数据帧的代码)并显示所需的输出应该是什么样子。这样,我们就可以通过一个预期的例子来消除对要做什么的模糊描述。
  • 很抱歉,再次阅读后,我确实可以看到它令人困惑。所以我目前有数据集 A,并且该数据集的一列包含一个值。我想调用一个通过该列并找到非 NA 值的函数。每次它在该列中检测到一个值时,它都会应用该函数将该行继续该行的最后 80 行切片到一个新的数据帧(例如 Datafame B)。我们的想法是构建一个新的数据帧,其中每个数据帧 A 中的非 NA 值只有 80 行。
  • 如果您需要更多信息,请告诉我,我不知道是否可以为您提供确切的数据,但我可以在编辑问题时重建一个示例。

标签: python numpy pandas


【解决方案1】:

问题有点不清楚,但这是我认为您需要的:

In[1] import pandas as pd
      df = pd.DataFrame({"Example": ["A","A","A","A","A","B","B","B","B","B"], 
"Value": [10,20,30,15,10,10,20,30,15,10], "Characters1": [np.nan, np.nan, 1, np.nan,np.nan,np.nan,np.nan,np.nan,1, np.nan]})

In[2] df[df.Characters1.bfill(limit=2) == 1] # Replace limit=2 with 99 for your case
Out[2]: 
   Characters1 Example  Value
0          NaN       A     10
1          NaN       A     20
2          1.0       A     30
6          NaN       B     20
7          NaN       B     30
8          1.0       B     15

【讨论】:

  • 非常感谢,这应该可以了。对含糊之处感到抱歉,将确保下一个问题非常清楚。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 2017-02-17
  • 1970-01-01
  • 2018-12-13
  • 2021-03-30
  • 2018-08-22
相关资源
最近更新 更多