我有一个这样的数据帧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
的偶数索引中。此外,我不知道我的做法是否正确。如果有人能提供建议/帮助,我将不胜感激。
发布于 2019-02-02 15:11:43
如果您可以在'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
发布于 2021-04-18 04:50:31
获取偶数行: dfdf.index.map(lambda : x%2==0)
获取奇数行: dfdf.index.map(lambda : x%2==1)
发布于 2019-02-02 15:16:42
一种解决方案是ffill
,然后是带有自定义函数的groupby
。注意,该解决方案不显式依赖于dataframe索引,因此也适用于具有可以从上一行推断的任意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
https://stackoverflow.com/questions/54498373
复制