【问题标题】:Attach adjacent row to selected rows in Pandas将相邻行附加到 Pandas 中的选定行
【发布时间】:2018-10-10 22:05:52
【问题描述】:

我想从每个唯一的df.Rate.unique() 中选择df.ID = A12 加上下面的行。

这是我的 df。

d = {'ID':['A13', 'A13', 'A12', 'A12','A14', 'A14','A11', 'A12', 'A16', 'A17', 'A12', 'A12'], 
         'A':[1.1,1.4,1.2, 1.6, 1.1, 1.8,1.1, 1.0, 1.9, 2.2, 3.2, 1.4],
         'B':[2.4,2.3,2.7, 1.8, 7.5, 3.5,2.7, 2.3, 2.5, 5.4, 1.4, 9.4],
         'Rate':[0.215333,0.215333,0.215333,0.215333,0.822504,0.822504,0.822504,0.822504,1.538575,1.538575,1.538575,1.538575]}
df = pd.DataFrame(data=d)


df1 = df[df.ID.str.contains('A12')==True] 

但我希望前一个 ID 的最后一行包含在 df1 中。

期望的输出

    A   B   ID
0   1.4 2.3 A13
1   1.2 2.7 A12
2   1.6 1.8 A12
3   1.1 2.7 A11
4   1.0 2.3 A12
5   2.2 5.4 A17
6   3.2 1.4 A12
7   1.4 9.4 A12

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用boolean indexinggroupby by Seriesshift,按位OR (|) 用原始掩码替换缺失值和链:

    mask = df.ID.str.contains('A12')
    df = df[mask.groupby(df['Rate']).shift(-1).fillna(False) | mask]
    print (df)
         ID    A    B      Rate
    1   A13  1.4  2.3  0.215333
    2   A12  1.2  2.7  0.215333
    3   A12  1.6  1.8  0.215333
    6   A11  1.1  2.7  0.822504
    7   A12  1.0  2.3  0.822504
    9   A17  2.2  5.4  1.538575
    10  A12  3.2  1.4  1.538575
    11  A12  1.4  9.4  1.538575
    

    【讨论】:

    • 我总是忘记联合和交叉点+1。虽然防止错误地从另一个Rate 中拉出一行似乎很痛苦?
    • 哎呀,我忘了费率了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2023-02-07
    • 2014-05-19
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多