在 pandas 2 乘 2 的 DataFrame 的行之间迭代
Iterate between the rows of a DataFrame of pandas 2 by 2
假设为以下 DataFrame,其中时间列由 Python TimeDelta 对象定义:
ID
date
direction
time
0
2022-01-02
IN
NaT
0
2022-01-03
OUT
1 days
0
2022-01-04
IN
NaT
0
2022-01-08
OUT
4 days
1
2022-03-02
IN
NaT
1
2022-03-05
OUT
3 days
2
2022-04-06
IN
NaT
2
2022-04-10
OUT
4 days
我需要迭代现有的 DataFrame 以最有效的方式创建另一个 DataFrame,其中包含来自两两行的信息,即:
ID
start_date
end_date
time
0
2022-01-02
2022-01-03
1 days
0
2022-01-04
2022-01-08
4 days
1
2022-03-02
2022-03-05
3 days
2
2022-04-06
2022-04-10
4 days
假设原始DataFrame包含在df
中。我需要一种两两遍历行的方法,能够在每次迭代中查询第一行及其下一行的信息。希望您能帮帮我,先谢谢了。
您可以使用 df.loc
+ df.shift
创建最终数据框:
df_out = pd.DataFrame(
{
"ID": df.loc[::2, "ID"],
"start_date": df.loc[::2, "date"],
"end_date": df.shift(-1).loc[::2, "date"],
"time": df.shift(-1).loc[::2, "time"],
}
)
print(df_out)
打印:
ID start_date end_date time
0 0 2022-01-02 2022-01-03 1 days
2 0 2022-01-04 2022-01-08 4 days
4 1 2022-03-02 2022-03-05 3 days
6 2 2022-04-06 2022-04-10 4 days
或者:
df_out = pd.DataFrame(
{
"ID": df.loc[::2, "ID"].values,
"start_date": df.loc[::2, "date"].values,
"end_date": df.loc[1::2, "date"].values,
"time": df.loc[1::2, "time"].values,
}
)
假设为以下 DataFrame,其中时间列由 Python TimeDelta 对象定义:
ID | date | direction | time |
---|---|---|---|
0 | 2022-01-02 | IN | NaT |
0 | 2022-01-03 | OUT | 1 days |
0 | 2022-01-04 | IN | NaT |
0 | 2022-01-08 | OUT | 4 days |
1 | 2022-03-02 | IN | NaT |
1 | 2022-03-05 | OUT | 3 days |
2 | 2022-04-06 | IN | NaT |
2 | 2022-04-10 | OUT | 4 days |
我需要迭代现有的 DataFrame 以最有效的方式创建另一个 DataFrame,其中包含来自两两行的信息,即:
ID | start_date | end_date | time |
---|---|---|---|
0 | 2022-01-02 | 2022-01-03 | 1 days |
0 | 2022-01-04 | 2022-01-08 | 4 days |
1 | 2022-03-02 | 2022-03-05 | 3 days |
2 | 2022-04-06 | 2022-04-10 | 4 days |
假设原始DataFrame包含在df
中。我需要一种两两遍历行的方法,能够在每次迭代中查询第一行及其下一行的信息。希望您能帮帮我,先谢谢了。
您可以使用 df.loc
+ df.shift
创建最终数据框:
df_out = pd.DataFrame(
{
"ID": df.loc[::2, "ID"],
"start_date": df.loc[::2, "date"],
"end_date": df.shift(-1).loc[::2, "date"],
"time": df.shift(-1).loc[::2, "time"],
}
)
print(df_out)
打印:
ID start_date end_date time
0 0 2022-01-02 2022-01-03 1 days
2 0 2022-01-04 2022-01-08 4 days
4 1 2022-03-02 2022-03-05 3 days
6 2 2022-04-06 2022-04-10 4 days
或者:
df_out = pd.DataFrame(
{
"ID": df.loc[::2, "ID"].values,
"start_date": df.loc[::2, "date"].values,
"end_date": df.loc[1::2, "date"].values,
"time": df.loc[1::2, "time"].values,
}
)