逻辑的
我想在pandas数据帧中将连续的行合并为一行。这是我目前拥有的表格:
id_number | document_number | 值 | >log_dateco | 延迟(天)[/tr>||
---|---|---|---|---|---|
4100000739 | 10678327 | 0 | 2017年1月13日14:23A | ||
4100000739 | 106788192 | <1>2017年1月13日16:39A0 | |||
4100000740 | 106787500 | 2017年1月13日16:14 | A|||
4100000740 | 106788227 | F2017年1月13日16:40||||
4100000743 | 109334630 | N2017年2月13日14:22B | [/tr>|||
4100000743 | 109358034 | 0 | 2017年2月14日9:24B | 0 | |
4100000743 | 109358735 | 1 | 2017年2月14日9:37|||
4100000743 | 109334630 | N2017年2月13日14:22C | [/td>|||
4100000743 | 109358034 | 0 | 2017年2月14日9:24C | 0||
4100000743 | 109358735 | 1 | 2017年2月14日9:37|||
4100000743 | 109334630 | N2017年2月13日14:22C | [/td>|||
4100000743 | 109358034 | 0 | 2017年2月14日9:24C | 0||
4100000743 | 109358735 | 1 | 2017年2月14日9:37|||
4100000743 | 109334630 | N2017年2月13日14:22D | [/td>|||
4100000743 | 109358034 | 0 | 2017年2月14日9:24D | 0||
4100000743 | 109358735 | 1 | 2017年2月14日9:37D | 0 |
groupby()
id_number- 第n行和第(n+1)行的
concat(axis=1)
rename(columns=...)
以输出所需的列名- 使用
head()
删除组中没有(n+1)行的最后一行
import pandas as pd
import io
df = pd.read_csv(io.StringIO("""id_number~document_number~value~log_date~co~delay(days)
4100000739~106782327~0~1/13/2017 14:23~A~
4100000739~106788192~1~1/13/2017 16:39~A~0
4100000740~106787500~0~1/13/2017 16:14~A~
4100000740~106788227~F~1/13/2017 16:40~A~0
4100000743~109334630~N~2/13/2017 14:22~B~
4100000743~109358034~0~2/14/2017 9:24~B~0
4100000743~109358735~1~2/14/2017 9:37~B~0
4100000743~109334630~N~2/13/2017 14:22~C~
4100000743~109358034~0~2/14/2017 9:24~C~0
4100000743~109358735~1~2/14/2017 9:37~C~0
4100000743~109334630~N~2/13/2017 14:22~C~
4100000743~109358034~0~2/14/2017 9:24~C~0
4100000743~109358735~1~2/14/2017 9:37~C~0
4100000743~109334630~N~2/13/2017 14:22~D~
4100000743~109358034~0~2/14/2017 9:24~D~0
4100000743~109358735~1~2/14/2017 9:37~D~0"""), sep="~")
def mergerows(df):
return pd.concat([df.rename(columns={"value":"value1","log_date":"log_date1"}).drop(columns="delay(days)"),
df.shift(-1).loc[:,["value","log_date","delay(days)"]].rename(columns={"value":"value2","log_date":"log_date2"})
], axis=1).head(len(df)-1)
dfc = df.groupby("id_number", as_index=False).apply(mergerows).reset_index(drop=True)
log_date2 | 延迟(天) | ||||
---|---|---|---|---|---|
0 | 4100000739 | 106783272 | 2017年1月13日14:23:left;">2017年1月13日16:39 | 0 | |
1 | 0 | ||||
2 | 0 | ||||
3 | 0 | ||||
4 | nan | ||||
5 | 0 | ||||
6 | 0 | ||||
7 | nan | ||||
8 | 0 | ||||
9 | 0 | ||||
10 | nan | ||||
11 | 4100000743 | 109334630 | >td style="text-align:left;">2017年2月13日14:22D0 | 2/14/2017 9:24 | 0 |
12 | 0 |