我想將多行組合成一行,原始資料框在下面:
Item Date Invoice No Center Address
0 44 24/2/2022 AF6026321237160 Japan 106-0041 Tokyo-to,
1 Minato-ku, Azabudai,
2 1 no 9 no 12.
3 45 24/2/2022 AF6026321237179 Korea Bldg. 102 Unit 304
4 Sajik-ro-3-gil23
5 Jongno-gu, Seoul 30174
6 46 24/2/2022 AF6026321237188 HK Flat 25, 12/F, Acacia Building
7 150 Kennedy Road
8 WAN CHAI
合并行后
Item Date Invoice No Center Address
0 44 24/2/2022 AF6026321237160 Japan 106-0041 Tokyo-to,Minato-ku, Azabudai,1 no 9 no 12.
1 45 24/2/2022 AF6026321237179 Korea Bldg. 102 Unit 304Sajik-ro-3-gil23Jongno-gu,Seoul 30174
2 46 24/2/2022 AF6026321237188 HK Flat 25, 12/F, Acacia Building150 Kennedy Road,WAN CHAI
有沒有可能的解決方案?我想將幾行中的地址組合并連接成一行
我之前嘗試過這段代碼,但結果不是我所期望的
df = df.groupby(['Item'])['Address'].transform(lambda x : ''.join(x))
uj5u.com熱心網友回復:
您可以使用安全列中的非空值來定義組,然后聚合:
# group rows that follow a row with non-empty value in Item
group = df['Item'].fillna('').ne('').cumsum()
# create a dictionary of aggregation functions
# by default get first row of group
d = {c: 'first' for c in df}
# for Address, join the rows
d['Address'] = ' '.join
df2 = df.groupby(group).agg(d)
輸出:
Item Date Invoice No Center Address
Item
1 44 24/2/2022 AF6026321237160 Japan 106-0041 Tokyo-to, Minato-ku, Azabudai, 1 no 9 no 12.
2 45 24/2/2022 AF6026321237179 Korea Bldg. 102 Unit 304 Sajik-ro-3-gil23 Jongno-gu, Seoul 30174
3 46 24/2/2022 AF6026321237188 HK Flat 25, 12/F, Acacia Building 150 Kennedy Road WAN CHAI
uj5u.com熱心網友回復:
您可以嘗試對 NaN 值進行前向填充,然后進行分組和聚合
out = (df.ffill()
.groupby(['Item', 'Date', 'Invoice No', 'Center'], as_index=False)
.agg({'Address': ' '.join}))
print(out)
Item Date Invoice No Center \
0 44 24/2/2022 AF6026321237160 Japan
1 45 24/2/2022 AF6026321237179 Korea
2 46 24/2/2022 AF6026321237188 HK
Address
0 106-0041 Tokyo-to, Minato-ku, Azabudai, 1 no 9 no 12.
1 Bldg. 102 Unit 304 Sajik-ro-3-gil23 Jongno-gu, Seoul 30174
2 Flat 25, 12/F, Acacia Building 150 Kennedy Road WAN CHAI
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/477530.html
