这是我的数据框:
A B 1 2 5
1 1 26 5 5
2 6 4 2 2
2 3 8 7 7
2 4 3 10 19
所以在这里你可以看到列是' A' ' B' ' 1' ' 2' ' 5' 我想创建一个接受一个参数作为int的函数,然后创建一个具有' A'的新数据框。 ' B'作为arugment传递的列和列。 所以它会像这样,但我不知道如何获取列的名称是一个int任何想法吗?谢谢!
def merge(arg):
new_df=pd.concat([df.A, df.B, df.arg], axis=1 )
merge(5)
A B 5
1 1 5
2 6 2
2 3 7
2 4 19
答案 0 :(得分:2)
最简单的解决方案是使用copy
def merge(arg):
return df[['A', 'B', str(arg)]].copy()
print (merge(5))
A B 5
0 1 1 5
1 2 6 2
2 2 3 7
3 2 4 19
concat
的解决方案,如果列str
仅转换为str
- 效果不错,但速度较慢:
def merge(arg):
return pd.concat([df.A, df.B, df[str(arg)]], axis=1 )
print (merge(5))
A B 5
0 1 1 5
1 2 6 2
2 2 3 7
3 2 4 19
如果int
:
def merge(arg):
return pd.concat([df.A, df.B, df[arg]], axis=1 )
print (merge(5))
A B 5
0 1 1 5
1 2 6 2
2 2 3 7
3 2 4 19
答案 1 :(得分:1)
def merge(arg):
return df.loc[:, ['A', 'B', str(arg)]]
merge(2)
A B 2
0 1 1 5
1 2 6 2
2 2 3 7
3 2 4 10
您还可以嵌入if/else
逻辑以使其更强大
def merge(arg):
arg = arg if arg in df.columns else str(arg)
return df.loc[:, ['A', 'B', arg]]
print(merge(2))
A B 2
0 1 1 5
1 2 6 2
2 2 3 7
3 2 4 10
或者有点聪明的交集
def merge(arg):
cols = df.columns.intersection(['A', 'B', arg, str(arg)])
return df.loc[:, cols]
print(merge(2))
A B 2
0 1 1 5
1 2 6 2
2 2 3 7
3 2 4 10