熊猫:将具有多个值的新列添加到groupby数据框

花花公子

对于我的数据框,我想为另一列中的每个唯一值添加一个新列。新列由几个日期时间条目组成,另一列的每个唯一值都应获取该日期时间条目。

例子:

原始Df:

ID  
1             
2               
3

新列DF:

Date
2015/01/01
2015/02/01
2015/03/01

产生的Df:

ID    Date
1     2015/01/01
      2015/02/01
      2015/03/01
2     2015/01/01
      2015/02/01
      2015/03/01
3     2015/01/01
      2015/02/01
      2015/03/01

我试图坚持这种解决方案:https : //stackoverflow.com/a/12394122/3856569但这给了我以下错误:Length of values does not match length of index

任何人都有一个简单的解决方案来做到这一点?非常感谢!

最大容量

更新:复制ids 6次:

In [172]: %paste
data = """\
id
1
2
3
"""
df = pd.read_csv(io.StringIO(data))
# repeat each ID 6 times
df = pd.DataFrame(df['id'].tolist()*6, columns=['id'])

start_date = pd.to_datetime('2015-01-01')

df['date'] = start_date
df['date'] = df.groupby('id', as_index=False)\
               .transform(lambda x: pd.date_range(start_date,
                                                  freq='1D',
                                                  periods=len(x)))
df.sort_values(by=['id','date'])
## -- End pasted text --
Out[172]:
    id       date
0    1 2015-01-01
3    1 2015-01-02
6    1 2015-01-03
9    1 2015-01-04
12   1 2015-01-05
15   1 2015-01-06
1    2 2015-01-01
4    2 2015-01-02
7    2 2015-01-03
10   2 2015-01-04
13   2 2015-01-05
16   2 2015-01-06
2    3 2015-01-01
5    3 2015-01-02
8    3 2015-01-03
11   3 2015-01-04
14   3 2015-01-05
17   3 2015-01-06

旧的通用答案:

准备样品DF:

start_date = pd.to_datetime('2015-01-01')

data = """\
id
1
2
2
3
1
2
3
2
1
"""
df = pd.read_csv(io.StringIO(data))

In [200]: df
Out[200]:
   id
0   1
1   2
2   2
3   3
4   1
5   2
6   3
7   2
8   1

解决方案:

In [201]: %paste
df['date'] = start_date
df['date'] = df.groupby('id', as_index=False)\
               .transform(lambda x: pd.date_range(start_date,
                                                  freq='1D',
                                                  periods=len(x)))
## -- End pasted text --

In [202]: df
Out[202]:
   id       date
0   1 2015-01-01
1   2 2015-01-01
2   2 2015-01-02
3   3 2015-01-01
4   1 2015-01-02
5   2 2015-01-03
6   3 2015-01-02
7   2 2015-01-04
8   1 2015-01-03

排序:

In [203]: df.sort_values(by='id')
Out[203]:
   id       date
0   1 2015-01-01
4   1 2015-01-02
8   1 2015-01-03
1   2 2015-01-01
2   2 2015-01-02
5   2 2015-01-03
7   2 2015-01-04
3   3 2015-01-01
6   3 2015-01-02

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将新列添加到具有基于列表和数据框的多个条件的数据框

熊猫中的新列-通过应用列表groupby将系列添加到数据框

熊猫在关联的字符串值处将列添加到新数据框中?

将具有相同列名但值不同的列添加到列表中的多个数据框

根据具有空白行的列将新列添加到数据框

将具有不同长度的列表作为新列添加到数据框

将具有取决于另一列的值的列添加到数据框

将具有自定义值的列添加到数据框

将列添加到具有恒定值的数据框

将具有恒定值的列添加到pandas数据框

将具有随机值的列添加到 pyspark 数据框

将列添加到数据框中,每组具有不同的值

将具有预定义值的列添加到数据框

将列表中具有零值的多列添加到Pandas数据框

如何简化将具有某些值的列添加到数据框的操作?

如何将嵌套列表作为新列添加到现有的熊猫数据框

如何将具有特定数据的新列添加到 R 数据框中

R:将新列添加到具有条件的现有数据框中

将一个数据框重复的所有列值添加到其他熊猫中

如何在python中将webscraped html数据添加到具有多个值的数据框?

将列添加到我的数据框,列出具有最高行值的列

熊猫-将缺失的列自动添加到数据框

熊猫将列添加到未引用的数据框

将列添加到数据框熊猫上的组

将列添加到 groupby 数据框

将groupby添加到现有数据框

Python:将行添加到熊猫数据框中,数组作为列值而不是多行?

在Pyspark中,如何将值列表作为新列添加到现有数据框?

将新列添加到数据框,其值基于下一行的值