【问题标题】:Dropping first part of multi-indexed df based on event基于事件删除多索引df的第一部分
【发布时间】:2022-01-04 04:55:09
【问题描述】:

我有以下数据框:

import pandas as pd

df = pd.DataFrame(
    (
        {
            "foo": ["1", "1", "1", "1", "2", "2", "2", "2"],
            "bar": ["1", "2", "3", "4", "1", "2", "3", "4"],
            "info": [1, 2, 3, 4, 5, 6, 7, 8],
            "event": [0, 0, 1, 0, 0, 1, 0, 0],
        }
    )
)
# set multiindex
df.set_index(["foo", "bar"], inplace=True)

print(df)
         info  event
foo bar
1   1       1      0
    2       2      0
    3       3      1
    4       4      0
2   1       5      0
    2       6      1
    3       7      0
    4       8      0

我只想在事件 == 1 之后对数据框进行切片以保留行:

foo bar values event
1 3 3 1
1 4 4 0
2 2 6 1
2 3 7 0
2 4 8 0

采样频率足够高,我可以删除 1 的行,但如果可能,我更愿意保留它们。

【问题讨论】:

  • 你想得到什么输出?
  • 那里的表格。它在 foo:1 中删除前 2 个,在 foo:2 中删除前 1 个

标签: python pandas dataframe multi-index


【解决方案1】:

你可以这样尝试:

# Get relevant indices
index_of_first_event = df.loc[("1", "1"):, "event"].eq(1).idxmax()
last_index_of_first_sub_dataframe = ("1", str(df.loc[("1", ), :].shape[0]))
index_of_second_event = df.loc[("2", "1"):, "event"].eq(1).idxmax()

# Get new dataframe
new_df = pd.concat(
    [
        df.loc[index_of_first_event:last_index_of_first_sub_dataframe, :],
        df.loc[index_of_second_event:, :],
    ]
)

print(new_df)
# Output
         info  event
foo bar
1   3       3      1
    4       4      0
2   2       6      1
    3       7      0
    4       8      0

【讨论】:

    【解决方案2】:

    我最终做的是:

    1.Mapped 0->na
    2.Back-filled the event column
    3.Dropped all 1's
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2021-10-16
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      相关资源
      最近更新 更多