我有一个每天一行的 Pandas DataFrame 和一些布尔列。我想将它们转换成一个 DataFrame 来保存这些列为True的范围。
启动 DF 的示例:
import pandas as pd
t = True
f = False
df = pd.DataFrame(
{'indic': [f, f, t, t, t, f, f, f, t, f, f, t, t, t, t]},
index=pd.date_range("2018-01-01", "2018-01-15")
)
print(df)
indic
2018-01-01 False
2018-01-02 False
2018-01-03 True
2018-01-04 True
2018-01-05 True
2018-01-06 False
2018-01-07 False
2018-01-08 False
2018-01-09 True
2018-01-10 False
2018-01-11 False
2018-01-12 True
2018-01-13 True
2018-01-14 True
2018-01-15 True
这个 DataFrame 的列从 2018-01-03 到 2018-01-05 是 True,然后是 2018-01-09(只有一天),然后是从 2018-01-12 到 2018-01-15。
我在这个例子中寻找的输出是这个 DF(日期对象而不是字符串也可以,甚至是首选):
desired_result = pd.DataFrame({
'from': ["2018-01-03", "2018-01-09", "2018-01-12"],
'to': ["2018-01-05", "2018-01-09", "2018-01-15"]
})
print(desired_result)
from to
0 2018-01-03 2018-01-05
1 2018-01-09 2018-01-09
2 2018-01-12 2018-01-15
作为扩展,在后续步骤中,我希望它适用于多列,例如:
df = pd.DataFrame(
{
'indic_A': [f, f, t, t, t, f, f, f, t, f, f, t, t, t, t],
'indic_B': [f, f, f, f, f, f, f, f, t, t, t, t, t, f, f]
},
index=pd.date_range("2018-01-01", "2018-01-15")
)
desired_result = pd.DataFrame({
'from': ["2018-01-03", "2018-01-09", "2018-01-12", "2018-01-09"],
'to': ["2018-01-05", "2018-01-09", "2018-01-15", "2018-01-13"],
'what': ["indic_A", "indic_A", "indic_A", "indic_B"]
})
print(desired_result)
from to what
0 2018-01-03 2018-01-05 indic_A
1 2018-01-09 2018-01-09 indic_A
2 2018-01-12 2018-01-15 indic_A
3 2018-01-09 2018-01-13 indic_B
有没有一种pythonic的、优雅的方式来做到这一点——甚至可能是一个pandas函数?
慕码人2483693
BIG阳
相关分类