我有一个这样的数据帧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
我的输出数据框应该是这样的,
Name Net Quantity
0 Auto 1010 10,12
1 Rtal 4145 18,14
2 Indl 6223,7222 16,18
从上面的数据框中可以看到,如果要在奇数(索引)中存在任何值,我想将值与偶数(索引)行组合起来,以便获得输出。
我尝试了以下方法来提取奇数值,
df.iloc[1::2, :]
这给了我以下内容,
Name Net Quantity
1 NaN NaN 12
3 NaN NaN 14
5 NaN 7222.0 18
此后,我现在不介绍如何将这些值添加到df
的偶数索引中。除此之外,我不确定我的方法是否正确。如果有人可以提供建议/帮助,我将不胜感激。
答案 0 :(得分:2)
如果您对“ Net”中的浮点数没问题,则可以使用groupby
和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
要处理浮点数,解决方案变得更加复杂;您可以使用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
答案 1 :(得分:1)
一种解决方案是先使用ffill
,然后再使用自定义函数来groupby
。请注意,该解决方案不显式依赖于数据帧索引,因此也适用于更常见的情况,在这种情况下,您可以从上一行推断出任意NaN
值。>
# 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
答案 2 :(得分:0)
获取偶数行:df[df.index.map(lambda x: x%2==0)]
获取奇数行:df[df.index.map(lambda x: x%2==1)]