【发布时间】:2020-07-30 04:40:15
【问题描述】:
我有一个 DataFrame(如下)。我有兴趣拆开 from 和 to 列。
对于from 和to 之间的每个不同年份,我需要将from 和to 列拆分为多行。例如,第一行会产生类似这样的东西
我尝试了从pd.melt() 到pd.pivot_table() 的所有方法。
【问题讨论】:
标签: python pandas pivot-table
我有一个 DataFrame(如下)。我有兴趣拆开 from 和 to 列。
对于from 和to 之间的每个不同年份,我需要将from 和to 列拆分为多行。例如,第一行会产生类似这样的东西
我尝试了从pd.melt() 到pd.pivot_table() 的所有方法。
【问题讨论】:
标签: python pandas pivot-table
创建一列类似数组的对象,其中包含 'from' 和 'to' 之间的所有年份,然后在该列上 explode。这不是最有效的解决方案,但很简单。
样本数据
a b c d e from to
0 2 9 1 7 3 1940 1945
1 5 6 2 6 1 1950 1951
代码
df['year'] = [np.arange(f,t+1) for f,t in zip(df['from'], df['to'])]
df = df.explode('year')
a b c d e from to year
0 2 9 1 7 3 1940 1945 1940
0 2 9 1 7 3 1940 1945 1941
0 2 9 1 7 3 1940 1945 1942
0 2 9 1 7 3 1940 1945 1943
0 2 9 1 7 3 1940 1945 1944
0 2 9 1 7 3 1940 1945 1945
1 5 6 2 6 1 1950 1951 1950
1 5 6 2 6 1 1950 1951 1951
【讨论】:
pd.explode() 方法。它奏效了。