gpt4 book ai didi

python - 如何转换 Pandas 数据框并将行转换为列

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:45 26 4
gpt4 key购买 nike

我有以下 Pandas 数据框

 df1
code prod rsp date_from date_to time_from time_to
123 MS 75 2018-01-01 2018-01-02 06:00 05:59
123 HS 65 2018-01-01 2018-01-02 06:00 05:59
123 MS 76 2018-01-01 2018-01-02 10:00 05:59
123 MS 76 2018-01-01 2018-01-02 11:00 05:59
123 MS 73 2018-01-02 2018-01-03 06:00 05:59
123 HS 64 2018-01-02 2018-01-03 06:00 05:59
123 MS 73 2018-01-02 2018-01-03 10:00 05:59

我想要的数据框是

 code   prod   rsp_1  date_from      date_to    time_from_1   time_to_1   rsp_2   time_from_2   time_to_2
123 MS 75 2018-01-01 2018-01-02 06:00 05:59 76 10:00 05:59
123 HS 65 2018-01-01 2018-01-02 06:00 05:59 - - - - -
123 MS 73 2018-01-02 2018-01-03 06:00 05:59 - - - - -
123 HS 64 2018-01-02 2018-01-03 06:00 05:59 - - -

我正在用 python 进行跟踪

L = list(map(tuple,price[['code','prod','date_from']].values))
s = pd.Series(L, index=price.index)
s = s.ne(s.shift()).cumsum()
g = s.groupby(s).cumcount()

df1 = (price.set_index(['code','prod','date_from', s,g])
.unstack()
.sort_index(level=1, axis=1)
.reset_index(level=2, drop=True))

df1.columns = [f'{i}_{j+1}' for i, j in df1.columns]
df1 = df1.reset_index()

我希望将唯一价格rsp 纳入列中。例如,在 df1 中,产品 MSdate_from 2018-01-01 有两个重复的条目 rsp 76,所以我们将只考虑第一个条目。所以对于 1 种产品,我们将只有一个日期和相应的价格变化历史记录。

最佳答案

使用drop_duplicates然后似乎应该简化解决方案:

#by one column
price = price.drop_duplicates('rsp')
#if necessary by multiple columns
#cols = ['code','prod','date_from', 'date_to', 'rsp']
#price = price.drop_duplicates(subset=cols)

g = price.groupby(['code','prod','date_from', 'date_to']).cumcount()

df1 = (price.set_index(['code','prod','date_from','date_to', g])
.unstack()
.sort_index(level=1, axis=1))

df1.columns = [f'{i}_{j+1}' for i, j in df1.columns]
df1 = df1.reset_index()
print (df1)
code prod date_from date_to rsp_1 time_from_1 time_to_1 rsp_2 \
0 123 HS 2018-01-01 2018-01-02 65.0 06:00 05:59 NaN
1 123 HS 2018-01-02 2018-01-03 64.0 06:00 05:59 NaN
2 123 MS 2018-01-01 2018-01-02 75.0 06:00 05:59 76.0
3 123 MS 2018-01-02 2018-01-03 73.0 06:00 05:59 NaN

time_from_2 time_to_2
0 NaN NaN
1 NaN NaN
2 10:00 05:59
3 NaN NaN

关于python - 如何转换 Pandas 数据框并将行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53719754/

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