首页 > 解决方案 > 使用熊猫切片和连接?

问题描述

到目前为止,我的努力是微乎其微的。事实上,我不知道用熊猫来处理它。

我得到了一个偶数和奇数的列表,我需要拆分列表并将其粘贴到相邻的列中,并对列表执行连接命令。

for example my list reads:
odd    even
1       2
3       4
5       6
7       8
9       10
11      12
13      14
15      16
17      18  
19      20 

所以我将列完全拆分为两列并使用 excel concatenate 命令连接

Expected result:
odd-odd    even-even
111         212
313         414 
515         616   
717         818 
919        1020

帮助!

最小的工作代码:

import pandas as pd
list2=[1,3,5,7,9,11,13,15,17,19]
df = pd.DataFrame((list2), columns=['odd'])
df = df.astype(str).groupby(df['odd'].astype(str).str[-1]).agg({"odd": lambda x: "".join(x)}).reset_index(drop=True)
print (df)

输出得到:

   odd
0  111
1  313
2  515
3  717
4  919

但是当我向列表示例添加更多值时: list2=[1,3,5,7,9,11,13,15,17,19,21,23,25,27] 我得到

     odd
0  11121
1  31323
2  51525
3  71727
4    919

我正在寻找的是:

115
317
519
721
923
1125
1327

这样做。感谢大家的努力。

import pandas as pd
list2=[1,3,5,7,9,11,13,15,17,19,21,23,25,27]
df = pd.DataFrame((list2), columns=['odd'])
n2 = len(df)
n1 = int(n2/2)
df2 = pd.DataFrame()
df2['odd-odd'] = df.odd[0:n1].astype(str).to_numpy()+df.odd[n1:n2].astype(str).to_numpy()
print (df2['odd-odd'])

标签: pythonpandas

解决方案


试试这个,转换所有列以string提取最后一个元素作为参考groupby,应用aggregate& join

(
    df.astype(str).
        groupby(df['odd'].astype(str).str[-1]).
        agg({"odd": lambda x: "".join(x), "even": lambda x: "".join(x)}).
        reset_index(drop=True)
)

   odd  even
0  111   212
1  313   414
2  515   616
3  717   818
4  919  1020

推荐阅读