基于熊猫中另一列的增量

我有2列:组和级别范围。每个“组”都有一个水果列表,每个“级别范围”都有一个级别范围,例如“ L1-L4”。

所需的结果是下图中的“水果”和“等级”列。

因此,如果范围是“ L2-L3”,则级别列将对第一行说“ 2”,然后对下一行说“ 3”。我还想将“组”列表中的每个项目添加到“水果”列。

任何帮助将不胜感激!谢谢!

在此处输入图片说明

这是我已经完成的工作:

我创建了2个帮助器列:“ level_repeat”和“ grouping_repeat”,以帮助我复制必要的行。

df['level_repeat'] = df['Level'].replace(['L1-L6', 'L1-L2', 'L1-L3', 'L4-L6', 'L3-L6', 'L2-L6'], [6, 2, 3, 2, 3, 4])

df['grouping_repeat'] = df['Group'].str.len()

df_new = pd.DataFrame([df.ix[idx] for idx in df.index
                        for _ in range(df.ix[idx]['level_repeat'])]).reset_index(drop=True)

df_new = pd.DataFrame([df_new.ix[idx] for idx in df_new.index
                        for _ in range(df_new.ix[idx]['grouping_repeat'])]).reset_index(drop=True)           

结果是,对于上面的示例,我将有10行,其中该组有2个项目,并且级别范围跨越5个级别(2 * 5 = 10)。但是,在将数据插入“水果”和“级别”列中时,我仍然需要帮助。

我想要一片T骨牛排

这是一种方法,我首先从'Level Range'创建一个带有数字的列'level_list' range,因此对于'L2-L5',该列表将为[2,3,4,5]。

df['level_list'] = (df['Level Range'].str.split('-',expand=True)
                     .stack().str[-1].unstack()
                     .apply(lambda x: range(int(x[0]),int(x[1])+1),1))

现在,使用itertools中的产品和带有列表的两列(Group和level_list),您可以创建新的数据框:

from itertools import product
df_new = pd.DataFrame([ [ind, group, level_range, g, l] 
                        for ind, group, level_range, level_list 
                             in df[['Group','Level Range', 'level_list']].itertuples() 
                                   for l, g in product(level_list, group) ], 
                      columns = ['original_ind','Group', 'Level Range', 'Fruit','Level'])

输入像

df = pd.DataFrame({'Group':[['Apple','Banana']], 'Level Range': ['L2-L5']})

结果为df_new

   original_ind            Group Level Range   Fruit  Level
0             0  [Apple, Banana]       L2-L5   Apple      2
1             0  [Apple, Banana]       L2-L5  Banana      2
2             0  [Apple, Banana]       L2-L5   Apple      3
3             0  [Apple, Banana]       L2-L5  Banana      3
4             0  [Apple, Banana]       L2-L5   Apple      4
5             0  [Apple, Banana]       L2-L5  Banana      4
6             0  [Apple, Banana]       L2-L5   Apple      5
7             0  [Apple, Banana]       L2-L5  Banana      5

请注意,如果您不在乎原始索引,则可以删除该列或不创建该列

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

基于熊猫数据框中的另一列重塑一列

如何基于熊猫中的另一列数组对一列数组排序?

如何基于另一列的值获取值增量

从熊猫数据框中基于另一列的列的每个列表中删除元素

熊猫基于拆分另一列添加新列

熊猫基于另一列的dict值添加列

如何添加基于熊猫中另一列的值的新列

当您需要基于另一列更新列时,可以在熊猫中循环的替代方法

如何基于熊猫中另一列的频率值显示列值?

熊猫:基于另一列的增加或重置计数

熊猫基于另一列替换值条件

基于另一列的熊猫条件转移

基于另一列的带有标记的熊猫线图

过滤基于另一列的熊猫数据框

基于另一列合并熊猫数据框中的间隔

熊猫根据另一列中的值应用基于值的值

熊猫-在另一列中基于int的str(行)切片

在条件基于另一列的情况下从熊猫数据框中删除重复项

如何获取在另一列中运行的增量值

基于另一列的当前行和同一列的上一行的列的增量值

Python:如何基于熊猫另一列中的部分字符串存在来构建新列?

数据框中基于另一列的列的模式

SQL Server 中的条件列基于另一列

基于Pandas DataFrame中另一列的总和列

从基于另一列的列中获取值

将多列除以熊猫中的另一列

将某些列除以熊猫中的另一列

如何使用熊猫中的另一列更新列

熊猫-添加一列,其值基于当前行和上一行中的另一列值计算