我有一个有多个列的Pandas dataframe (假设以下列格式简化示例):
Item Interval Specs Chocolate 0 0.001 Chocolate 3 0.002 Chocolate 5 0.007 Milk 0 0.004 Milk 2 0.008 ....
我想要做的是为dataframe中的每个原始行创建重复行,其中, Interval 值是 0 ,对于其他 Interval 情况, Interval 的值被更改了。例如, Item 巧克力在原始数据中有3例与 Interval 0, 3 and 5 有关。对于 Interval 为0的情况,我希望复制此行并保持 Specs 值不变,但只修改 Interval 值并创建2个重复副本,即 Interval 值3和5。类似地,对于Milk Item ,我希望创建一个重复行,间隔改为2。(因此,要创建的重复行数直接取决于单个 Item 的唯一 Interval 值的数量)。
Interval
0
Item
0, 3 and 5
Specs
预期的数据格式是:
Item Interval Specs Chocolate 0 0.001 Chocolate 3 0.002 Chocolate 5 0.007 Chocolate 3 0.001 --Duplicate row added and Interval value changed Chocolate 5 0.001 --Duplicate row added and Interval value changed Milk 0 0.004 Milk 2 0.008 Milk 2 0.004 --Duplicate row added and Interval value changed
因此,类似的问题( Duplicate rows based on value with condition )侧重于基于条件创建重复行,而不是更改与其他行对应的数据格式中的值。如能就如何做到这一点提出任何建议,将不胜感激。
发布于 2021-11-23 15:02:34
解决这一问题的一种方法是使用所有没有 Interval=0 的元素创建第二个数据格式。
Interval=0
df2 = df[df.Interval != 0]
然后将列 Specs 的值从带有 Interval==0 的条目映射到新数据from中的 Specs 列:
Interval==0
df2.loc[:, 'Specs'] = df2['Item'].map(df[df.Interval == 0].set_index('Item')['Specs'])
并将两个数据文件串连在一起。
df = pd.concat([df, df2], axis=0)
这将为您提供所需的输出。
发布于 2021-11-23 15:03:47
我们可以通过首先创建2个dataframes来做到这一点:
然后,我们可以创建一个数据字典,它的间隔为0。使用此字典,我们可以更新其他数据格式的规范值。然后,更新的dataframe与原始dataframe合并。代码如下-
rows = [['Chocolate', 0, 0.001], ['Chocolate', 3, 0.002], ['Chocolate', 5, 0.007], ['Milk', 0, 0.004], ['Milk', 2, 0.008]] df = pd.DataFrame(rows, columns=['Item', 'Interval', 'Specs']) # original dataframe df1 = df[df['Interval'].ne(0)].copy() # dataframe with rows having interval other than 0 df2 = df[df['Interval'].eq(0)].copy() # dataframe with rows having interval 0