熊猫按单元格的值分解数据框

Posted

技术标签:

【中文标题】熊猫按单元格的值分解数据框【英文标题】:pandas explode dataframe by values of cell 【发布时间】:2021-08-07 14:44:04 【问题描述】:

我来自数据框:

df = C1 C2 C3 from_time to_time
     a   b c     1         3
     q   t y     4         9

我想通过 from_time , to_time 的值来爆炸它,所以它会是:

df = C1 C2 C3 time from_time to_time
     a   b c    1      1         3
     a   b c    2      1         3
     a   b c    3      1         3
     q   t y    4      4         9
     q   t y    5      4         9

...

最好的方法是什么? 谢谢

【问题讨论】:

【参考方案1】:

如果 DataFrame 较小​​,请使用 DataFrame.exploderanges:

df.insert(3, 'time', df.apply(lambda x: range(x.from_time, x.to_time + 1), axis=1))
df = df.explode('time')
print (df)
  C1 C2 C3 time  from_time  to_time
0  a  b  c    1          1        3
0  a  b  c    2          1        3
0  a  b  c    3          1        3
1  q  t  y    4          4        9
1  q  t  y    5          4        9
1  q  t  y    6          4        9
1  q  t  y    7          4        9
1  q  t  y    8          4        9
1  q  t  y    9          4        9

为了获得更好的性能,请使用 Index.repeatDataFrame.loc,对于新列,使用 GroupBy.cumcount 用于每个索引值的计数器,并使用 from_time 值:

df = df.loc[df.index.repeat(df.to_time.sub(df.from_time) + 1)]
df.insert(3, 'time', df.groupby(level=0).cumcount().add(df['from_time']))
print (df)
  C1 C2 C3  time  from_time  to_time
0  a  b  c     1          1        3
0  a  b  c     2          1        3
0  a  b  c     3          1        3
1  q  t  y     4          4        9
1  q  t  y     5          4        9
1  q  t  y     6          4        9
1  q  t  y     7          4        9
1  q  t  y     8          4        9
1  q  t  y     9          4        9

【讨论】:

以上是关于熊猫按单元格的值分解数据框的主要内容,如果未能解决你的问题,请参考以下文章

基于将另一个单元格与另一个数据帧的单元格-熊猫进行比较,更改一个数据帧中单元格的值

Excel VBA 根据下拉框单元格的值来改变另一个下拉框单元格的值

散点图:将色调设置为数据框单元格的值

提取特定单元格的值并将其填充以代替 pyspark 数据框中的 NA 值

在熊猫数据框单元格中插入列表

获取 Spark Dataframe 中特定单元格的值