首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果条件匹配,如何复制行?

如果条件匹配,如何复制行?
EN

Stack Overflow用户
提问于 2022-11-08 19:03:04
回答 1查看 27关注 0票数 1

我有以下数据集

代码语言:javascript
复制
    trade_id    start_date  end_date    factset_entity_id   product_id  product_name    l6_id   multi_assign_flag
0   100000191   2017    NaT 0711GY-E    99996362    Fan Milk - FanYogo  5.015152e+11    0.0
1   100000193   2017    2018    0711GY-E    99996413    Fan Milk - FanDango/Frozen FanDango 5.015151e+11    0.0
2   100000193   2018    2022    0711GY-E    99996413    Fan Milk - FanDango 5.015151e+11    0.0
3   100000193   2022    NaT 0711GY-E    99996413    Fan Milk - FanDango 5.015151e+11    0.0
4   100000231   2016    2018    05NC3S-E    59979529    Ci:z Holdings - Dr. Ci:Labo 5.020102e+11    1.0

我的目标是复制start_date和end_date不同的行,例如

代码语言:javascript
复制
1   100000193   2017    2018    0711GY-E    99996413    Fan Milk - FanDango/Frozen FanDango 5.015151e+11    0.0

应该是

代码语言:javascript
复制
2017    100000193   0711GY-E    99996413    Fan Milk - FanDango/Frozen FanDango 5.015151e+11    0.0
2018    100000193   0711GY-E    99996413    Fan Milk - FanDango/Frozen FanDango 5.015151e+11    0.0

你知道我在这里不用循环能做什么吗?谢谢

我试着用简单的循环来做,这很好,但速度很慢。我想知道熊猫是否有捷径来缓解它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-12 18:39:47

对于以下玩具数据,其中0行和2行有不同的开始日期和结束日期:

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame(
    {
        "trade_id": [100000191, 100000192, 100000193, 100000194, 100000231],
        "start_date": [2017, 2017, 2018, 2022, 2018],
        "end_date": [None, 2017, 2022, 2022, 2018],
        "factset_entity_id": [
            "0711GY-E",
            "0711GY-E",
            "0711GY-E",
            "0711GY-E",
            "05NC3S-E",
        ],
        "product_id": [99996362, 99996413, 99996414, 99996415, 59979529],
    }
)

下面是使用pd.concat实现这一任务的一种方法

代码语言:javascript
复制
df = pd.concat([df, df.loc[df["start_date"] != df["end_date"], :]]).sort_index()

然后,您可以看到第0行和第2行现在被复制:

代码语言:javascript
复制
print(df)
# Output
    trade_id  start_date  end_date factset_entity_id  product_id
0  100000191        2017       NaN          0711GY-E    99996362
0  100000191        2017       NaN          0711GY-E    99996362
1  100000192        2017    2017.0          0711GY-E    99996413
2  100000193        2018    2022.0          0711GY-E    99996414
2  100000193        2018    2022.0          0711GY-E    99996414
3  100000194        2022    2022.0          0711GY-E    99996415
4  100000231        2018    2018.0          05NC3S-E    59979529
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74365921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档