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

在Python中的堆栈操作期间保留少量NA并删除其余NA

方安怡
2023-03-14
问题内容

我有一个如下所示的数据帧

df2 = pd.DataFrame({'person_id':[1],'H1_date' : ['2006-10-30 00:00:00'], 'H1':[2.3],'H2_date' : ['2016-10-30 00:00:00'], 'H2':[12.3],'H3_date' : ['2026-11-30 00:00:00'], 'H3':[22.3],'H4_date' : ['2106-10-30 00:00:00'], 'H4':[42.3],'H5_date' : [np.nan], 'H5':[np.nan],'H6_date' : ['2006-10-30 00:00:00'], 'H6':[2.3],'H7_date' : [np.nan], 'H7':[2.3],'H8_date' : ['2006-10-30 00:00:00'], 'H8':[np.nan]})

As shown in my screenshot above, my source datframe (df2) contains few NA’s

当我执行“df2.stack()”时,我会丢失数据中的所有NA。 不过,我想保留NA的'H7\u date'和'H8',因为他们有 它们对应的值/日期对。对于'H7\u date',我有一个有效值对于H7和H8,我得到了它对应的日期。
我只想在两个值(H5\u dateH5)都为空时删除记录
不。
请注意,我这里只有几列,我的真实数据超过了
150列和列名事先未知。
我希望我的输出如下图所示这是不可能的
有’H5_date’,’H5’,尽管他们是NA的



问题答案:

try pd.DataFrame.melt

df = pd.melt(df2, id_vars='person_id', var_name='col', value_name='dates')
df['col2'] = df['col'].str.split("_").str[0]
df['count'] = df.groupby(['col2'])['dates'].transform(pd.Series.count)
df = df[df['count'] != 0]
df.drop(['col2', 'count'], axis=1, inplace=True)
print(df)



    person_id      col                dates
0           1  H1_date  2006-10-30 00:00:00
1           1       H1                  2.3
2           1  H2_date  2016-10-30 00:00:00
3           1       H2                 12.3
4           1  H3_date  2026-11-30 00:00:00
5           1       H3                 22.3
6           1  H4_date  2106-10-30 00:00:00
7           1       H4                 42.3
10          1  H6_date  2006-10-30 00:00:00
11          1       H6                  2.3
12          1  H7_date                  NaN
13          1       H7                  2.3
14          1  H8_date  2006-10-30 00:00:00
15          1       H8                  NaN


 类似资料:
  • 问题内容: 我有活动: 在此容器内,取决于所按下的按钮是FragmentA还是FragmentB。这些片段是嵌套子片段的 容器 。即,每个片段中都包含自己的导航堆栈。 在活动的onCreate中,我将实例化这两个片段: 然后,我继续互相替换: 到目前为止,一切都很好。但 问题: 每次我用fragmentB替换fragmentA时(反之亦然) -getChildFragmentManager() 破

  • 我有两个30m x 30m光栅文件,我想从中采样点。在采样之前,我想从图像中去除云层。我转向R和Hijman的光栅包来完成这项任务。 我使用绘图Poly(sp=TRUE)命令,绘制了18个不同的多边形。该函数似乎不允许18个多边形作为一个sp对象,所以我将它们全部分开绘制。然后,我给多边形一个与光栅匹配的投影4string,并将它们设置为列表。我通过lApplication函数运行列表以将它们转换

  • 基于Spark Scala代码,我可以看到在内部调用sort方法,该方法执行全局排序。 https://github.com/apache/spark/blob/branch-2.4/sql/core/src/main/scala/org/apache/spark/sql/dataset.scala 而且drop_duplicates(cols)方法也按照bellow spark代码转换为聚合(f

  • 如何从堆栈中弹出特定片段,并从片段中删除其他片段?例如,这些是我的片段,我现在在E right know。 A- 想从E回到B,清除C和D。我怎么能做到这一点?

  • 问题内容: 有什么规范的方法可以从堆栈中删除添加的中间件?似乎应该可以直接修改数组,但是我想知道是否有一个我应该首先考虑的文档化方法。 问题答案: 实际上来自Connect(不是Express),它真正要做的就是将中间件功能推送到应用程序的。 因此,您应该很好地将函数拼接出数组。 但是,请记住,周围没有文档,也没有删除中间件的功能。您冒着将来版本的Connect进行更改与代码不兼容的风险。

  • 我有下表和Postgres: 作为select查询的一部分,我希望能够基于最高的Col2值(每个Col1值永远不会有多个最高值)在Col1中删除重复项,并保留相应的Col2、Col3值。 期望输出: