合并 pandas 中的奇数和偶数索引行

use*_*057 5 python dataframe python-3.x pandas pandas-groupby

我有一个df这样的数据框,

   Name     Net        Quantity  
0  Auto     1010       10
1  NaN      NaN        12
2  Rtal     4145       18
3  NaN      NaN        14
4  Indl     6223       16
5  NaN      7222       18
Run Code Online (Sandbox Code Playgroud)

我的输出数据框应该是这样的,

       Name     Net         Quantity  
    0  Auto     1010        10,12
    1  Rtal     4145        18,14
    2  Indl     6223,7222   16,18
Run Code Online (Sandbox Code Playgroud)

正如您从上面的数据框中看到的,如果奇数(索引)中存在任何值,我想将值与偶数(索引)行组合,以便我可以获得输出。

我尝试了以下方法来提取奇数值,

df.iloc[1::2, :]
Run Code Online (Sandbox Code Playgroud)

这给了我以下内容,

    Name    Net   Quantity
1   NaN     NaN       12
3   NaN     NaN       14
5   NaN     7222.0    18
Run Code Online (Sandbox Code Playgroud)

之后,我现在不知道如何将这些值添加到我的df. 除此之外,我不确定我的方法是否正确。如果有人可以提供建议/帮助,我将不胜感激。

cs9*_*s95 3

如果您对“Net”中的浮点数感到满意,则可以使用groupbyand agg

df.groupby(df.index // 2).agg(lambda x: x.dropna().astype(str).str.cat(sep=','))

   Name            Net Quantity
0  Auto         1010.0    10,12
1  Rtal         4145.0    18,14
2  Indl  6223.0,7222.0    16,18
Run Code Online (Sandbox Code Playgroud)

为了处理浮动,解决方案变得有点复杂;如果可能的话,您可以使用ffill并尝试向下转型。

df.groupby(df.index // 2).agg(
    lambda x: ','.join(x.ffill(downcast='infer').astype(str).unique()))

   Name        Net Quantity
0  Auto       1010    10,12
1  Rtal       4145    18,14
2  Indl  6223,7222    16,18 
Run Code Online (Sandbox Code Playgroud)