首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫中奇数行和偶数行的组合

熊猫中奇数行和偶数行的组合
EN

Stack Overflow用户
提问于 2019-02-02 23:05:13
回答 3查看 5.4K关注 0票数 5

我有一个这样的数据帧df

代码语言:javascript
运行
复制
   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

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

代码语言:javascript
运行
复制
       Name     Net         Quantity  
    0  Auto     1010        10,12
    1  Rtal     4145        18,14
    2  Indl     6223,7222   16,18

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

我试着提取奇数值,

代码语言:javascript
运行
复制
df.iloc[1::2, :]

这给了我以下几点,

代码语言:javascript
运行
复制
    Name    Net   Quantity
1   NaN     NaN       12
3   NaN     NaN       14
5   NaN     7222.0    18

之后,我现在不知道如何将这些值添加到df的偶数索引中。此外,我不知道我的做法是否正确。如果有人能提供建议/帮助,我将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-02 23:11:43

如果您可以在'Net‘中使用浮点数,可以使用groupbyagg

代码语言:javascript
运行
复制
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

要处理浮点,解决方案会变得更加复杂;您可以使用ffill,并在可能的情况下尝试向下转换。

代码语言:javascript
运行
复制
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 
票数 3
EN

Stack Overflow用户

发布于 2021-04-18 12:50:31

获取偶数行: dfdf.index.map(lambda : x%2==0)

获取奇数行: dfdf.index.map(lambda : x%2==1)

票数 2
EN

Stack Overflow用户

发布于 2019-02-02 23:16:42

一种解决方案是ffill,然后是带有自定义函数的groupby。注意,该解决方案不显式依赖于dataframe索引,因此也适用于具有可以从上一行推断的任意NaN值的更一般情况。

代码语言:javascript
运行
复制
# forward fill to remove null values
df = df.ffill(downcast='infer')

# convert to str so you can use str.join later
grp_cols = ['Net', 'Quantity']
df[grp_cols] = df[grp_cols].astype(str)

# apply groupby with custom functions
res = df.groupby('Name').agg({'Net': lambda x: ','.join(np.unique(x)),
                              'Quantity': lambda x: ','.join(x)}).reset_index()

print(res)

#    Name        Net Quantity
# 0  Auto       1010    10,12
# 1  Indl  6223,7222    16,18
# 2  Rtal       4145    18,14
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54498373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档