python - Python:如何根据一系列条件语句的结果将元素输出到特定列
问题描述
结合excel和pandas,我正在寻找一种可以区分特定行业编号并逐行复制相应列下的元素的解决方案。
IE:行业代码为58时,归档日期应复制到同一行第58列下。
在Overflow的帮助下,我能够创建公司代码是否以 000 结尾的第一个条件。
试图:
mask = df['Code'].str.endswith('000') == True
mask21 = df['Industry Code'].str.endswith('21') == True
mask57 = df['Industry Code'].str.endswith('57') == True
mask58 = df['Industry Code'].str.endswith('58') == True
mask59 = df['Industry Code'].str.endswith('59') == True
mask70 = df['Industry Code'].str.endswith('70') == True
mask71 = df['Industry Code'].str.endswith('71') == True
mask74 = df['Industry Code'].str.endswith('74') == True
mask75 = df['Industry Code'].str.endswith('75') == True
maskA008 = df['Industry Code'].str.endswith('A008') == True
df.loc[mask, ['c1','c2']] = df.loc[mask,['Code','Corporate Name']].to_numpy()
df.loc[~mask, ['c3','c4']] = df.loc[~mask, ['Code','Corporate Name']].to_numpy()
df.loc[mask21, ['c21']] = df.loc[~mask21, ['End Date']].to_numpy()
df.loc[mask57, ['c57']] = df.loc[~mask57, ['End Date']].to_numpy()
df.loc[mask58, ['c58']] = df.loc[~mask58, ['End Date']].to_numpy()
df.loc[mask59, ['c59']] = df.loc[~mask59, ['End Date']].to_numpy()
df.loc[mask70, ['c70']] = df.loc[~mask70, ['End Date']].to_numpy()
df.loc[mask71, ['c71']] = df.loc[~mask71, ['End Date']].to_numpy()
df.loc[mask74, ['c74']] = df.loc[~mas`enter code here`k74, ['End Date']].to_numpy()
df.loc[mask75, ['c75']] = df.loc[~mask75, ['End Date']].to_numpy()
df.loc[maskA008, ['A008']] = df.loc[~maskA008, ['End Date']].to_numpy()
错误代码:无法使用长度与值不同的多索引选择索引器进行设置
解决方案
您可以通过字典创建新列,其值用于匹配字典键中的字符串结尾和字典值中的新列名称:
df = pd.DataFrame({"Industry Code":['a0021','b400557','aa', 'aa009359'],
"End Date":['2015-01-01','2015-01-02','2015-01-03', '2015-01-04']})
ends = {'21':'c21','57':'c57','59':'c59','A008':'A008'}
for k, v in ends.items():
mask = df['Industry Code'].str.endswith(k, na=False)
df.loc[mask, v] = df.loc[mask, 'End Date']
#if need append inverse mask
#df.loc[mask, v] = df.loc[~mask, 'End Date']
print (df)
Industry Code End Date c21 c57 c59 A008
0 a0021 2015-01-01 2015-01-01 NaN NaN NaN
1 b400557 2015-01-02 NaN 2015-01-02 NaN NaN
2 aa 2015-01-03 NaN NaN NaN NaN
3 aa009359 2015-01-04 NaN NaN 2015-01-04 NaN
推荐阅读
- java - 循环只在文本字段中打印一次,但在系统打印中工作得很好
- mongodb - 如何将atlas mongodb与集群连接
- python - 如何获得行之间的差异
- r - 如何为热图绘图转换“e”格式的数字
- pyodbc - 使用 pyodbc 的 SP_SEND_DBMAIL 出现问题(除了错误)
- flutter - Flutter 索引列表视图
- animation - 如何根据我在 Android Studio 中的计时器设置动画持续时间?
- java - 使用 QueryDSL 在 LOB 字段中搜索文本字符串
- html - 的作用是什么
在这段代码中标记? - api - 如何在请求 API 查询中包含元数据