我有一个数据文件,其中包含时间间隔的列,如0-10、11-20、21-30....、81-90。还有另外两列FH和SH下面的示例数据框表示我的数据的一部分:
df = pd.DataFrame()
df['Team'] = ['A','B','C']
df['0-10'] = ['4-0','2-2','3-2']
df ['11-20']= ['2-1','2-2','3-0']
df ['21-30'] = ['2-1','1-1','2-2']
df ['FH'] = ['5-3','6-6','5-5']
df ['SH'] = ['2-3','3-2','3-3']我想做的是在时间间隔(0-10,11-20,21-30)下拆分元素,这意味着对于每个时间间隔'0-10‘到'0-10F’和'0-10A‘,我将有两个不同的列,'0-10F’下的值将是4,'0-10A‘将是0对于团队A,我将对其他时间间隔'11-20’到'11-20F‘和'11-20A’做同样的事情,我可以分别为每个列编写代码,如下所示:
df ['0-10F'] = df['0-10'].str.split('-').str[0]
df ['0-10A'] = df['0-10'].str.split('-').str[1]
df ['11-20F'] = df['11-20'].str.split('-').str[0]
df ['11-20A'] = df['11-20'].str.split('-').str[1]
df ['21-30F'] = df['21-30'].str.split('-').str[0]
df ['21-30A'] = df['21-30'].str.split('-').str[1]有没有更好的方法来用一个通用代码为所有列编写它。以下是预期输出:

谢谢。
泽普。
发布于 2019-05-19 22:12:37
对带有-的列名使用DataFrame.filter,按每个列进行循环,并使用Series.str.split创建新的DataFrame,如果需要,还可以将值转换为整数:
for c in df.filter(like='-').columns:
df[[f'{c}F', f'{c}A']] = df[c].str.split('-', expand=True).astype(int)
print (df)
Team 0-10 11-20 21-30 FH SH 0-10F 0-10A 11-20F 11-20A 21-30F \
0 A 4-0 2-1 2-1 5-3 2-3 4 0 2 1 2
1 B 2-2 2-2 1-1 6-6 3-2 2 2 2 2 1
2 C 3-2 3-0 2-2 5-5 3-3 3 2 3 0 2
21-30A
0 1
1 1
2 2 https://stackoverflow.com/questions/56208553
复制相似问题