【问题标题】:Efficient row comparison in pandas dataframe on incomplete data熊猫数据框中不完整数据的有效行比较
【发布时间】:2022-01-11 20:37:57
【问题描述】:

我正在处理一个不完整的数据,该数据也有双精度数,我需要从双精度数中清除它,如果有的话,选择完整的行。

例如:that's how the data look

我需要搜索每一行以查看它是否是双精度数(具有“等级”>1),以及它本身是否不完整,但有一些完整的双精度数。 我现在解释一下:

  • 并非'rank' = 1 的每一行都有日期(这很重要), 但其中一些有双打 ('rank'>1) 有一个日期。
  • 并非每一行都有双精度。如果里面没有日期,也没关系。

所以,如果确实存在,我需要找到带有日期的双精度,并将其重写到排名为 1 的行(或删除不完整的第一行) 最后,我需要一个没有双打和尽可能多的日期的 DataFrame。

我的代码的迭代循环效率极低,但我不知道如何用矢量化或 .apply() 方法重写它:

def test_func(dataframe):
df = dataframe
df.iloc[0:0]
for i in range(0, dataframe.shape[0]):
    if dataframe.iloc[i]['rank'] == 1:
        temp_row = dataframe.iloc[i]
    
    elif ((dataframe.iloc[i+1]['rank']>1)&
    (pd.isna(dataframe.iloc[i]['date'])
    &(~pd.isna(dataframe.iloc[i+1]['date'])))):
        temp_row = dataframe.iloc[i+1]
    df.loc[i] = temp_row
return df

希望能得到一些帮助!来自俄罗斯的爱xo。

【问题讨论】:

  • 那么你的最终数据框应该只有 Rank 1s 吗? (要么是因为他们已经有了约会,要么是因为它是从 Rank > 1 带来的)我说得对吗?
  • 我在最终 df 中排名下降,我只使用它们来帮助我对双打进行排序,但是,最重要的是找到并添加日期,如果它在排名 >1 的行中

标签: python pandas dataframe numpy vectorization


【解决方案1】:

假设您通过电话进行分组,并且您有兴趣填充缺失的日期,那么您可以使用反向填充和分组依据,这将使用组中下一个可用的非空日期填充缺失的日期。

test_df['date'] = test_df.groupby(['phone'])['date'].apply(lambda x: x.bfill())

如果您需要填充其他缺失数据,只需将“日期”替换为相关列名

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多