python - 将 pandas 数据框中的不同长度列表转换为一列中的行

标签 python pandas

我在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/

相关文章:

python - 排序导入的文本文件?

python - 更改单个行值时保持总和约束行的比例

python - Pandas Dataframe 在列表列中删除重复项?

python - Pandas - 将另一个 DF 中的多行映射到多列

python - 返回 pandas 数据帧的函数

python - Whoosh (Python) 在哪里物理存储索引内容?

python - Pygame 碰撞检测错误, Sprite

python - tensorflow 2.0 中作为数组/列表的数据集

Python Pandas 基于另一列值创建新列

python - Pandas 计算机每小时平均值并设置在间隔中间