gpt4 book ai didi

python - Pandas :将列中的列表转置为行

转载 作者:行者123 更新时间:2023-11-28 21:41:56 24 4
gpt4 key购买 nike

所以我有如下所示的 pandas 数据框 df_dates。

   PERSON_ID   MIN_DATE   MAX_DATE
0 000099-48 2016-02-01 2017-03-20
1 000184 2016-02-05 2017-01-19
2 000461-48 2016-03-07 2017-03-20
3 000791-48 2016-02-01 2017-03-07
4 000986-48 2016-02-01 2017-03-17
5 001617 2016-02-01 2017-02-20
6 001768-48 2016-02-01 2017-03-20
7 001937 2016-02-01 2017-03-17
8 002223-48 2016-02-04 2017-03-16
9 002481-48 2016-02-05 2017-03-17

我正在尝试将最小值和最大值之间的所有日期添加为每个 Person_ID 的行。这是尝试过的。

df_dates.groupby('PERSON_ID').apply(lambda x: pd.date_range(x['MIN_DATE'].values[0], x['MAX_DATE'].values[0]))

但我得到的是,有什么方法可以将该系列转换为每个 Person_ID 的行吗?或者其他更好的方法?

PERSON_ID
0-L2ID DatetimeIndex(['2016-08-05', '2016-08-06', '20...
0-LlID DatetimeIndex(['2016-02-03', '2016-02-04', '20...
000099-48 DatetimeIndex(['2016-02-01', '2016-02-02', '20...
000184 DatetimeIndex(['2016-02-05', '2016-02-06', '20...
000276 DatetimeIndex(['2016-02-01', '2016-02-02', '20...
000461-48 DatetimeIndex(['2016-03-07', '2016-03-08', '20...
000493-48 DatetimeIndex(['2016-02-01', '2016-02-02', '20...
000615-48 DatetimeIndex(['2016-02-02', '2016-02-03', '20...
000791-48 DatetimeIndex(['2016-02-01', '2016-02-02', '20...
000986-48 DatetimeIndex(['2016-02-01', '2016-02-02', '20...
dtype: object

这是我正在努力实现的目标:

PERSON_ID   Date
000099-48 2/1/2016
000099-48 2/2/2016
000099-48 2/3/2016
000099-48 2/4/2016
:
:
000099-48 3/18/2016
000099-48 3/19/2016
000099-48 3/20/2016
000184 2/5/2016
000184 2/6/2016
000184 2/7/2016
:
:
000184 1/17/2017
000184 1/18/2017
000184 1/19/2017

最佳答案

您可以使用 melt reshape 形状, 然后执行 groupbyresample :

# Reshape via melt to get in the proper format for a resample.
df = df.melt(id_vars=['PERSON_ID'], value_vars=['MIN_DATE', 'MAX_DATE'], value_name='DATE')

# Set the index and drop unnecessary columns.
df = df.set_index('DATE').drop('variable', axis=1)

# Perform a groupby and resample.
df = df.groupby('PERSON_ID', group_keys=False).resample('D').ffill().reset_index()

结果输出:

           DATE  PERSON_ID
0 2016-02-01 000099-48
1 2016-02-02 000099-48
2 2016-02-03 000099-48
3 2016-02-04 000099-48
... ... ...
3976 2017-03-14 002481-48
3977 2017-03-15 002481-48
3978 2017-03-16 002481-48
3979 2017-03-17 002481-48

关于python - Pandas :将列中的列表转置为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44208743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com