【问题标题】:concatenate two data frames with different length under block_wise index in one frame在一帧中连接两个不同长度的数据帧在block_wise索引下
【发布时间】:2017-03-15 06:34:52
【问题描述】:

我需要连接两种不同长度的日期框:

一个数据帧如下所示,索引但块方式:

共有三个block_wise索引[0,1,2,3,4,5,6,7],[0,1,2,3,4],[0,1,2,3,4, 5,6],总长度为20。

第二帧只有一列: 此列表示一个类似枚举的变量,可以是重复的,可以是 int 或 string。但是此列/帧的长度严格等于第一帧中索引的块级别。所以一帧中的三个块索引,两个的长度为3。

我想要的是下面的连接表:

在 Pandas 中最好的方法是什么?块级和因子级可能远远超过 3。

【问题讨论】:

  • 第二帧有类枚举变量,可以有重复,但某个block下的索引与第二帧的数据按顺序一一对应。

标签: python pandas dataframe concatenation


【解决方案1】:

您可以使用map by dict of new column D created by cumsum of boolean mask:

df = pd.DataFrame({'A':range(1,21)}, index=[0,1,2,3,4,5,6,7]+[0,1,2,3,4]+[0,1,2,3,4,5,6])
df['B'] = 'b_' + df.A.astype('str')
df['C'] = 'c_' + df.A.astype('str')
df['A'] = 'a_' + df.A.astype('str')

df1 = pd.DataFrame({'D':['X','Y','Z']})

df['D'] = (df.index == 0).cumsum() - 1

d = df1['D'].to_dict()
print (d)
{0: 'X', 1: 'Y', 2: 'Z'}
df.D = df.D.map(d)
print (df)
      A     B     C  D
0   a_1   b_1   c_1  X
1   a_2   b_2   c_2  X
2   a_3   b_3   c_3  X
3   a_4   b_4   c_4  X
4   a_5   b_5   c_5  X
5   a_6   b_6   c_6  X
6   a_7   b_7   c_7  X
7   a_8   b_8   c_8  X
0   a_9   b_9   c_9  Y
1  a_10  b_10  c_10  Y
2  a_11  b_11  c_11  Y
3  a_12  b_12  c_12  Y
4  a_13  b_13  c_13  Y
0  a_14  b_14  c_14  Z
1  a_15  b_15  c_15  Z
2  a_16  b_16  c_16  Z
3  a_17  b_17  c_17  Z
4  a_18  b_18  c_18  Z
5  a_19  b_19  c_19  Z
6  a_20  b_20  c_20  Z

【讨论】:

  • @ChrinideWu - 有问题吗?
  • @jezrael 没问题,我的孩子只要碰我的电脑@_@,再次感谢
  • :D 很好 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2020-05-27
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 2017-04-06
  • 2021-10-15
相关资源
最近更新 更多