我在pandas中有一个这样的表,日期总是星期五,但由于假期或其他原因它可能不连续,而在Target中,它是一个列表,包含下周的表现,时间的长度最后一行的列表可能是 <5,因为今天是星期三,所以本周我只有星期一和星期二的数据:
| Date | Performance |
| 2022/01/27 | [0.1,0.1,0.2,0.1,0.3]|
| 2022/02/10 | [0.1,0.1,0.2,0.1,0.3]|
| 2022/02/17 | [0.1,0.1,0.2,0.1,0.3]|
| 2022/02/24 | [0.1,0.1] |
我想将此表转换为日期/绩效二维表,其中包含实际绩效日的日期和每天的绩效:
| Date | Performance |
| 2022/01/30 |0.1 |
| 2022/01/31 |0.1 |
| 2022/02/01 |0.2 |
| 2022/02/02 |0.1 |
| 2022/02/03 |0.3 |
| 2022/02/13 |0.1 |
| 2022/02/14 |0.1 |
| 2022/02/15 |0.2 |
| ... |... |
| 2022/02/27 |0.1 |
| 2022/02/28 |0.1 |
如何在 python 中执行此操作?
我尝试使用列表的 sum 将所有列表连接到一维数组,但将其附加到日期列时出现问题。
最佳答案
这是一种使用 df.explode()
的方法和 df.groupby().cumcount()
df = df.explode('Performance')
df['Date'] = pd.to_datetime(df['Date']) + pd.to_timedelta(
df.groupby(level=0).cumcount(), unit='D')
df = df.reset_index(drop=True)
print(df)
Date Performance
0 2022-01-27 0.1
1 2022-01-28 0.1
2 2022-01-29 0.2
3 2022-01-30 0.1
4 2022-01-31 0.3
5 2022-02-10 0.1
6 2022-02-11 0.1
7 2022-02-12 0.2
8 2022-02-13 0.1
9 2022-02-14 0.3
10 2022-02-17 0.1
11 2022-02-18 0.1
12 2022-02-19 0.2
13 2022-02-20 0.1
14 2022-02-21 0.3
15 2022-02-24 0.1
16 2022-02-25 0.1
关于python - 将 pandas 数据框中的不同长度列表转换为一列中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75598798/