【问题标题】:How to make a conditional statement creating new dataframe (Pandas)如何制作创建新数据框的条件语句(熊猫)
【发布时间】:2019-10-08 20:21:26
【问题描述】:

我有一个 MultiIndex 数据框,我想为其创建一个条件语句,如果“F”列中的值 > 0,则在“A”列的每个特定组中,那么,整个组( A) 列应复制到新的数据框 (newdf) 以进行进一步处理。

下面是两行 df 的样子:

  A         B            C          D           E      F   G    H 

 A8374D  []KLJEFSIJSE  some;text   more,text   12.4   4.6   13  X5

         []BKFLKJLJLK  text;some  other,stuff  65.0   6.5   11  Y0      

...

这是我目前所拥有的(不起作用)

for row in df['A']:
   newdf = df['F'].where(df['F'] > 0)
print(newdf)

错误信息:

KeyError: 'A'

【问题讨论】:

  • print (df.info()) 是什么?
  • 您可能只需要创建一个函数,然后使用 apply 将其实现到新的数据帧。像这样:df.apply(myfunct, axis=1)
  • @MEdwin,我将如何指定要在每个组中应用该函数?

标签: python pandas conditional


【解决方案1】:

我猜 A 是您的多重索引之一。我想让 A 不作为索引

df = df.reset_index()

然后我猜你想保留 A 如果 ANY 组 A 中的 F > 0

df_new = df.groupby('A').apply(lambda x: (x.F > 0).any()).to_frame('WANT').reset_index()

df_final = df[df.A.isin(df_new.loc[df_new.WANT == 1,'A'])]

如果您想确保ALL A 组中的 F 值 >0,则更改为

(x.F > 0).all()

如果您有任何其他问题,请告诉我。喜欢的话就给我点个赞吧

【讨论】:

  • 我得到一个带有组名(来自 A)的 df,如果它们的值 >0(真/假)。但我实际上想要一个新的数据框,如果其中任何一个在 F 上的值 >0,它将包含每个“A”组的所有成员。
  • df_final 是您想要的结果,因为如果有 F > 0,我会选择每个“A”组的所有数据
  • 我明白你的意思。但是没有办法为每个组获得不同的df吗?因为之后。这个我想比较“B”上的字符串之间的相似性,我认为如果每个“A”组都在不同的df中会更容易,因为它会创建多重比较。
  • 如果你真的想为不同的组创建不同的df,你可以使用“exec”。对于 df_final.A.unique() 中的组: exec("df_" + group + " = df_final[df_final.A == group]") 我不确定它是否有效,但它似乎很奇怪,因为你可以比较 B在一个数据框中
猜你喜欢
  • 2021-08-27
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 2021-02-28
  • 2022-08-02
  • 2019-03-27
相关资源
最近更新 更多