合并连续的行熊猫



我想在pandas数据帧中将连续的行合并为一行。这是我目前拥有的表格:

>log_date延迟(天)[/tr>2017年1月13日14:23<1>2017年1月13日16:39AAF2017年1月13日16:40N2017年2月13日14:22[/tr>2017年2月14日9:242017年2月14日9:37N2017年2月13日14:22[/td>2017年2月14日9:2402017年2月14日9:37N2017年2月13日14:22[/td>2017年2月14日9:2402017年2月14日9:37N2017年2月13日14:22[/td>2017年2月14日9:2402017年2月14日9:37
id_number document_number co
4100000739 10678327 0A
4100000739 1067881920
4100000740 106787500 2017年1月13日16:14
4100000740 106788227
4100000743 109334630B
4100000743 109358034 0B0
4100000743 109358735 1
4100000743 109334630C
4100000743 109358034 0C
4100000743 109358735 1
4100000743 109334630C
4100000743 109358034 0C
4100000743 109358735 1
4100000743 109334630D
4100000743 109358034 0D
4100000743 109358735 1D0
逻辑的
  • 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)
>td style="text-align:left;">2017年2月13日14:22D
log_date2延迟(天)
041000007391067832722017年1月13日14:23:left;">2017年1月13日16:390
10
20
30
4nan
50
60
7nan
80
90
10nan
11410000074310933463002/14/2017 9:240
120

最新更新