当前位置: 首页 > 面试题库 >

如何用大pandas的groupby输出来填充?

荀金鹏
2023-03-14
问题内容

我有一个具有4列(A,B,C,D)的数据框。D有一些NaN条目。我想用具有相同A,B,C值的D的平均值填充NaN值。

例如,如果A,B,C,D的值分别为x,y,z和Nan,那么我想将NaN值替换为A,B,C值的行的D平均值分别是x,y,z。


问题答案:

df['D'].fillna(df.groupby(['A','B','C'])['D'].transform('mean')) 会比 apply

In [2400]: df
Out[2400]:
   A  B  C    D
0  1  1  1  1.0
1  1  1  1  NaN
2  1  1  1  3.0
3  3  3  3  5.0

In [2401]: df['D'].fillna(df.groupby(['A','B','C'])['D'].transform('mean'))
Out[2401]:
0    1.0
1    2.0
2    3.0
3    5.0
Name: D, dtype: float64

In [2402]: df['D'] = df['D'].fillna(df.groupby(['A','B','C'])['D'].transform('mean'))

In [2403]: df
Out[2403]:
   A  B  C    D
0  1  1  1  1.0
1  1  1  1  2.0
2  1  1  1  3.0
3  3  3  3  5.0

细节

In [2396]: df.shape
Out[2396]: (10000, 4)

In [2398]: %timeit df['D'].fillna(df.groupby(['A','B','C'])['D'].transform('mean'))
100 loops, best of 3: 3.44 ms per loop


In [2397]: %timeit df.groupby(['A','B','C'])['D'].apply(lambda x: x.fillna(x.mean()))
100 loops, best of 3: 5.34 ms per loop


 类似资料:
  • 问题内容: 尝试从计算中创建新列。在下面的代码中,我获得了每个日期的正确计算值(请参阅下面的组),但是当我尝试用它创建一个新列()时,我得到了NaN。因此,我正在尝试在数据框中使用Data3所有日期的总和创建一个新列,并将其应用于每个日期行。例如,2015-05-08位于2行中(总计为),在这个新列中,我希望两行中都具有55。 问题答案: 你要使用此方法将返回索引与df对齐的,然后可以将其添加为新

  • 问题内容: 我从这样的输入数据开始 打印时显示为: 分组非常简单: 打印产生一个对象: 但是我最终想要的是另一个DataFrame对象,该对象包含GroupBy对象中的所有行。换句话说,我想得到以下结果: 我在pandas文档中看不到如何完成此操作。任何提示都将受到欢迎。 问题答案: 这是一个。但是,它具有层次结构索引: 也许你想要这样的东西? 或类似的东西:

  • 问题内容: 所以我的数据框看起来像这样: 每个站点的分数因国家/地区而异。我正在尝试查找每个站点/国家/地区组合得分的1/3/5天差异。 输出应为: 我首先尝试按网站/国家/日期排序,然后按网站和国家/地区分组,但是我无法从分组对象中获得区别。 问题答案: 首先,对DataFrame排序,然后您需要做的是: 不支持任意排序。如果您需要进行任意排序(例如Google在fb之前),则需要将它们存储在集

  • 问题内容: 我有一个这样的数据框说 和会话和收入的每个值代表了一种类型的,我要统计每个种类的数量表示的数量和的为1。 在无法输出所需结果后,我发现简单的调用函数。 我怎样才能做到这一点? 问题答案: 您似乎想一次按几列分组: 应该给你你想要的

  • 问题内容: 假设我有一个类似于下面的数据框,我将如何获取2个特定列之间的相关性,然后按“ ID”列分组?我相信Pandas的“ corr”方法可以找到所有列之间的相关性。如果可能的话,我也想知道如何使用.agg函数(即np.correlate)找到“ groupby”相关性。 是)我有的: 我需要的: 谢谢! 问题答案: 您几乎已经弄清楚了所有部分,只需将它们结合起来即可: 在您的情况下,为每个I