gpt4 book ai didi

python-3.x - 根据条件重复行和交换列

转载 作者:行者123 更新时间:2023-12-03 16:26:37 25 4
gpt4 key购买 nike

我有下表:

    name    a0  a1  type    val
0 name1 1 0 AB 100
1 name1 2 0 AB 105
2 name2 1 2 BB 110
3 name3 1 0 AN 120

我想这样做。

对于我看到的每种类型,其中类型名称不包含相同的 2 个字母,我想复制该行并交换 a0 和 a1 列以及类型列的字母。所以,我的结果将是:

     name   a0  a1  type    val
0 name1 1 0 AB 100
1 name1 0 1 BA 100
2 name1 2 0 AB 105
3 name1 0 2 BA 105
4 name2 1 2 BB 110
5 name3 1 0 AN 120
6 name3 0 1 NA 120

请注意,例如,对于相同的名称,我们可以具有相同的类型,但 a0 和 a1 不同(因此 val 也不同)。

因此,我们可以使用 name1 并输入 AB,如原始表的前两行所示。

我尝试过:

df1 = pd.DataFrame({'name':['name1', 'name1', 'name2', 'name3'], 'a0':[1, 2, 1, 1], 'a1':[0, 0, 2, 0], 'type':['AB', 'AB', 'BB', 'AN'], 'val':[100,105, 110, 120]})


for idx in df1.index:

a1 = df1.loc[idx, 'a0']
a0 = df1.loc[idx, 'a1']
val = df1.loc[idx, 'val']
name = df1.loc[idx, 'name']

if df1.loc[idx, 'type'] == 'AB':
new_type = 'BA'

elif df1.loc[idx, 'type'] == 'AN':
new_type = 'NA'

row = pd.DataFrame({'name':name, 'a0':a0 , 'a1':a1 , 'type':new_type, 'val':val}, index=np.arange(idx))
df1 = df1.append(row, ignore_index=False)
df1 = df1.sort_index().reset_index(drop=True)

但它给了我:

    name    a0  a1  type    val
0 name1 1 0 AB 100
1 name1 2 0 BA 105
2 name1 0 2 BA 105
3 name1 2 0 BA 105
4 name1 0 2 BA 105
5 name1 2 0 BA 105
6 name1 0 2 BA 105
7 name1 2 0 AB 105
8 name2 1 2 BB 110
9 name3 1 0 AN 120

最佳答案

首先创建掩码来识别具有2个不同字母的值,通过DataFrame.assign创建新的DataFrame ,交换列中的值,连接在一起并按索引排序,最后创建默认索引值:

mask = df['type'].apply(set).str.len() == 2

df1 = df[mask].assign(type=lambda x: df['type'].str[1] + df['type'].str[0])
df1[['a0','a1']] = df1[['a1','a0']].to_numpy()
#pandas below
#df1[['a0','a1']] = df1[['a1','a0']].values

df = pd.concat([df, df1]).sort_index().reset_index(drop=True)
print (df)
name a0 a1 type val
0 name1 1 0 AB 100
1 name1 0 1 BA 100
2 name1 2 0 AB 105
3 name1 0 2 BA 105
4 name2 1 2 BB 110
5 name3 1 0 AN 120
6 name3 0 1 NA 120

关于python-3.x - 根据条件重复行和交换列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56492500/

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