我有一个有多个列的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
值的数量)。
预期的数据格式是:
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
的元素创建第二个数据格式。
df2 = df[df.Interval != 0]
然后将列Specs
的值从带有Interval==0
的条目映射到新数据from中的Specs
列:
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
di = pd.Series(df2['Specs'].values, index=df2['Item']).to_dict()
for key, val in di.items():
df1.loc[df1.Item == key, 'Specs'] = val
res = pd.concat([df, df1], ignore_index=True).sort_values('Item')
https://stackoverflow.com/questions/70081807
复制相似问题