我试图根据不同列的多个条件生成一个新列。我的代码运行时没有跟踪错误。下面是数据和代码的片段。

import pandas as pd
import numpy as np
dfc = pd.read_csv(r'C:\\Users\\...01.csv', header='infer')
condition = [dfc['N']==0, dfc['count']==dfc['N'], (dfc['count'] > dfc['N']) & (dfc['N'] != 0)]
rng_result = [str(dfc['i']) + '-' + str(dfc['a']),'None','None to Many']
dfc['rng'] = np.select(condition, rng_result, np.nan)
dfc.to_csv(r'C:\\Users\\...R_01.csv', index=False)这可能是因为我不太理解numpy,中间的和最后的条件都很好。第一个条件提供一个不需要的数组。当我在下面输入时,我想要一个包含行'i‘和'a’值的字符串。

发布于 2020-07-09 07:19:11
从这个问题中,情况并不是显而易见的,但这个问题是否旨在解决以下问题?在“True”的情况下,我使用np.where()组合字符串。
import pandas as pd
import numpy as np
import io
data = '''
count,i,a,N
1,1.4,1.4,0
1,0,0,1
2,110,140,0
3,0,0,3
4,3.5,5.1,0
4,19,22,0
'''
df = pd.read_csv(io.StringIO(data), sep=',')
df['rng'] = np.where((df['N'] == 1)|(df['N'] == 3), None, df['i'].astype(str)+'-'+df['a'].astype(str))
df
count i a N rng
0 1 1.4 1.4 0 1.4-1.4
1 1 0.0 0.0 1 None
2 2 110.0 140.0 0 110.0-140.0
3 3 0.0 0.0 3 None
4 4 3.5 5.1 0 3.5-5.1
5 4 19.0 22.0 0 19.0-22.0发布于 2020-07-09 07:21:38
使用apply,我发现它更易读和可维护。
data = [["count","i","a","N"],
[1,1.4,1.4,0],
[1,0,0,1],
[2,110,140,0],
[3,0,0,3],
[4,3.5,5.1,0],
[4,19,22,0],
[50,0,17,21],
[25,0,0,25]]
def cond(r):
val = "tbd"
if r.N==0: val = str(r.i)+"-"+str(r.a)
if r["count"]==r.N: val = "None"
if (r['count'] > r['N']) and (r['N'] != 0): val = 'None to Many'
return val
df = pd.DataFrame(data[1:], columns=data[0])
df["rng"] = df.apply(lambda r: cond(r), axis=1)https://stackoverflow.com/questions/62808441
复制相似问题