连接已旋转的 Dataframe 中的两列
Join two columns in a Dataframe that has been pivoted
我有两列要加入(年份和季度)。我已经从 sql 中提取数据并将其旋转如下所示:
df3 = pd.pivot_table(df, index=["Year", "Q"], columns='Area', values="Lows", aggfunc=np.sum, fill_value=0)
我现在想将列 Year
和 Q
连接在一起用于图表目的,但我的索引似乎乱七八糟。以下是数据框的显示方式。
Before:
Year Q
2003 1
2
3
4
2004 1
2
Desired output:
Period
2003 1
2003 2
2003 3
2003 4
这应该有效:
df3.index = df3.index.to_series().apply(lambda x: ' '.join([str(y) for y in x]))
更普遍
join = lambda x, delim=' ': delim.join([str(y) for y in x])
df3.index = df3.index.to_series().apply(join, delim=' ')
另一个更快的解决方案:
df.index = ['{} {}'.format(idx[1], idx[0]) for idx in df.index]
和
df.index = [' '.join((str(idx[0]), str(idx[1]))) for idx in df.index]
时间:
In [190]: %timeit df.index.to_series().apply(lambda x: ' '.join([str(y) for y in x]))
10 loops, best of 3: 44.5 ms per loop
In [191]: %timeit [' '.join((str(idx[0]), str(idx[1]))) for idx in df.index]
10 loops, best of 3: 26.6 ms per loop
In [192]: %timeit ['{} {}'.format(idx[1], idx[0]) for idx in df.index]
100 loops, best of 3: 19.2 ms per loop
时间代码:
df = pd.DataFrame({'A':[2,2,2,1,7,2],
'B':[5,5,5,4,7,4],
'C':[7,8,9,4,8,1]})
df = df.groupby(['A','B']).sum()
df = pd.concat([df]*10000)
print (df)
我有两列要加入(年份和季度)。我已经从 sql 中提取数据并将其旋转如下所示:
df3 = pd.pivot_table(df, index=["Year", "Q"], columns='Area', values="Lows", aggfunc=np.sum, fill_value=0)
我现在想将列 Year
和 Q
连接在一起用于图表目的,但我的索引似乎乱七八糟。以下是数据框的显示方式。
Before:
Year Q
2003 1
2
3
4
2004 1
2
Desired output:
Period
2003 1
2003 2
2003 3
2003 4
这应该有效:
df3.index = df3.index.to_series().apply(lambda x: ' '.join([str(y) for y in x]))
更普遍
join = lambda x, delim=' ': delim.join([str(y) for y in x])
df3.index = df3.index.to_series().apply(join, delim=' ')
另一个更快的解决方案:
df.index = ['{} {}'.format(idx[1], idx[0]) for idx in df.index]
和
df.index = [' '.join((str(idx[0]), str(idx[1]))) for idx in df.index]
时间:
In [190]: %timeit df.index.to_series().apply(lambda x: ' '.join([str(y) for y in x]))
10 loops, best of 3: 44.5 ms per loop
In [191]: %timeit [' '.join((str(idx[0]), str(idx[1]))) for idx in df.index]
10 loops, best of 3: 26.6 ms per loop
In [192]: %timeit ['{} {}'.format(idx[1], idx[0]) for idx in df.index]
100 loops, best of 3: 19.2 ms per loop
时间代码:
df = pd.DataFrame({'A':[2,2,2,1,7,2],
'B':[5,5,5,4,7,4],
'C':[7,8,9,4,8,1]})
df = df.groupby(['A','B']).sum()
df = pd.concat([df]*10000)
print (df)