gpt4 book ai didi

python - 如何从 Pandas 数据框的列值创建新行

转载 作者:行者123 更新时间:2023-12-04 09:40:54 24 4
gpt4 key购买 nike

我有如下所示的数据框

输入

Date         Country    Type         Zip_Incl     Zip_Excl
10/4/2020 FR Regional 57_67_68
2/1/2020 GB Regional AB_DD
17/3/2021 GB Regional BT_TY TS_TN
18/3/2021 GB Regional
19/1/2021 IN Regional 68

我需要根据以下条件转换输入:

1) 如果 Zip_incl 不为空,则 Zip_incl 的值应传递到 Zip_Final

2) 如果存在 Zip_incl 和 Zip_Excl 值,则 Zip_incl 的值应传递到 Zip_Final

3)如果 Zip incl 为空并且存在 Zip_Excl 的值,则 Zip_Excl 应传递给 Zip_Final

输出
Date      Country   Type    Zip_Incl     Zip_Excl   Zip_Final
10/4/2020 FR Regional 57 57
10/4/2020 FR Regional 67 67
10/4/2020 FR Regional 68 68
2/1/2020 GB Regional AB AB
2/1/2020 GB Regional DD DD
17/3/2021 GB Regional BT TS BT
17/3/2021 GB Regional TY TN TY
18/3/2021 GB Regional
19/1/2021 IN Regional 68 68

如何才能做到这一点?

最佳答案

假设 dtypes 都是字符串,我会考虑以下内容

import pandas as pd
import numpy as np
df = pd.DataFrame({"Type":["Regional"]*5,
"Zip_Incl":["57_67_68", "", "BT_TY", "", ""],
"Zip_Excl":["","AB_DD", "TS_TN", "", "68"]})

# this tell us the element that are not ""
(~df[["Zip_Incl", "Zip_Excl"]].eq(""))

   Zip_Incl  Zip_Excl
0 True False
1 False True
2 True True
3 False False
4 False True

虽然以下返回每一行中的第一个非空字符串

sel = (~df.eq("")).values.argmax(1)

现在有一些 numpy我们可以得到你的输出的技巧

mat = df[["Zip_Incl", "Zip_Excl"]].values
df["Zip_Final"] = mat[np.arange(mat.shape[0]), sel]

更新 如果您的 df 不是那么大,并且您正在寻找一个非 numpy 的解决方案,您可以这样做

def fun(row):
if row["Zip_Incl"] != "":
return row["Zip_Incl"]
elif row["Zip_Excl"] != "":
return row["Zip_Excl"]
else:
return ""

df["Zip_Final"] = df.apply(fun, axis=1)

在这两种情况下,输出都是

       Type  Zip_Incl Zip_Excl Zip_Final
0 Regional 57_67_68 57_67_68
1 Regional AB_DD AB_DD
2 Regional BT_TY TS_TN BT_TY
3 Regional
4 Regional 68 68

更新 2:我刚刚意识到你想要拆分 Zip_Final在不同的行。使用以前的方法之一,您可以添加这些行

df["Zip_Final"] = df["Zip_Final"].str.split("_")

# you need pandas > 0 .25
df = df.explode("Zip_Final")

print(df)

       Type  Zip_Incl Zip_Excl Zip_Final
0 Regional 57_67_68 57
0 Regional 57_67_68 67
0 Regional 57_67_68 68
1 Regional AB_DD AB
1 Regional AB_DD DD
2 Regional BT_TY TS_TN BT
2 Regional BT_TY TS_TN TY
3 Regional
4 Regional 68 68

关于python - 如何从 Pandas 数据框的列值创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62337224/

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