熊猫按单元格的值分解数据框
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.explode
和 range
s:
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.repeat
和 DataFrame.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 根据下拉框单元格的值来改变另一个下拉框单元格的值