在熊猫中为行中的空单元格附加单元格值

时间:2018-12-28 13:20:23

标签: python pandas dataframe cell

我有一张下表,基于St_dateEn_date是否为空,我们必须将Des中的数据与即将出现的行合并,直到找到notnull < / p>

        St_date     En_date     Des         Ch      Deb     Cr      Tot
    0   01/06/18    01/06/18    CSH         NaN     NaN     1000    5786
    1   NaN         NaN         DEPOSIT     NaN     NaN     NaN     NaN
    2   01/06/18    01/06/18    DEP TFR     NaN     100     Nan     5686
    3   NaN         NaN         through     NaN     NaN     NaN     NaN

我想要的如下:

        St_date     En_date     Des             Ch      Deb     Cr      Tot
    0   01/06/18    01/06/18    CSH DEPOSIT     NaN     NaN     1000    5786    
    1   01/06/18    01/06/18    DEP TFR through NaN     100     Nan     5686

任何人都知道如何使用pandas

1 个答案:

答案 0 :(得分:1)

您可以那样做(请注意,我认为St_Date for(int i=1;i<=6;i++) { fscanf(f, "%s %d %d %d %d\n", &spiridusi[i].?????, &spiridusi[i].x, &spiridusi[i].y, &spiridusi[i].hp, &spiridusi[i].stamina); } 就像下面答案中的空字符串一样):

Nan

应返回此:

# Add a field containing previous index if St_date is empty
df["idx"] = df.apply(lambda x: x.name if x.St_date!='' else None, axis=1).ffill()
df

然后,您可以将此新列分组并合并您的 St_date En_date Des Ch Deb Cr Tot idx 0 01/06/18 01/06/18 CSH nan nan 1000 5786 0.0 1 nan DEPOSIT nan nan nan nan 0.0 2 01/06/18 01/06/18 DEP TFR nan 100 nan 5686 2.0 3 nan through nan nan nan nan 2.0 字段:

Des

去那里:

dfg = pd.DataFrame(df.groupby('idx')["Des"].apply(lambda x: "{%s}" % ', '.join(x)))
# Then you merge the result with the original dataframe on index
df = pd.merge(df.drop('Des',axis=1), dfg , left_index=True, right_index=True, how='left')
# Filter rows with empty values in Des (not merged) and reset index
df = df[df.Des.isna()==False].reset_index(drop=True)
df