Pandas 将函数应用于数据框中的特定选定列
我有以下数据帧:Pandas 将函数应用于数据框中的特定选定列,pandas,pandas-apply,Pandas,Pandas Apply,我有以下数据帧: # List of Tuples matrix = [([22, 23], [34, 35, 65], [23, 29, 31]), ([33, 34], [31, 44], [11, 16, 18]), ([44, 56, 76], [16, 34, 76], [21, 34]), ([55, 34], [32, 35, 38], [22, 24, 26]), ([66, 65, 67], [33, 38
# List of Tuples
matrix = [([22, 23], [34, 35, 65], [23, 29, 31]),
([33, 34], [31, 44], [11, 16, 18]),
([44, 56, 76], [16, 34, 76], [21, 34]),
([55, 34], [32, 35, 38], [22, 24, 26]),
([66, 65, 67], [33, 38, 39], [27, 32, 34]),
([77, 39, 45], [35, 36, 38], [11, 21, 34])]
# Create a DataFrame object
df = pd.DataFrame(matrix, columns=list('xyz'), index=list('abcdef'))
我可以将我的自定义函数应用于列表中所有列的输出开始项和结束项,如下所示:
def fl(x):
return [x[0], x[len(x)-1]]
df.apply(lambda x : [fl(i) for i in x])
但我想将该函数应用于选定的x和z列
我试着在下面提到这个
就像这样:
df[['x', 'y']].apply(fl)
如何在函数仅应用于x和z列且y列不变的情况下获得输出。用于元素处理,也可用于最后一个值使用[-1]
索引:
def fl(x):
return [x[0], x[-1]]
df[['x', 'z']] = df[['x', 'z']].applymap(fl)
print (df)
x y z
a [22, 23] [34, 35, 65] [23, 31]
b [33, 34] [31, 44] [11, 18]
c [44, 76] [16, 34, 76] [21, 34]
d [55, 34] [32, 35, 38] [22, 26]
e [66, 67] [33, 38, 39] [27, 34]
f [77, 45] [35, 36, 38] [11, 34]
或者使用zip
解决方案,将元组映射到list
s并通过str
进行选择:
def fl(x):
return list(map(list, zip(x.str[0], x.str[-1])))
df[['x', 'z']] = df[['x', 'z']].apply(fl)
print (df)
x y z
a [22, 23] [34, 35, 65] [23, 31]
b [33, 34] [31, 44] [11, 18]
c [44, 76] [16, 34, 76] [21, 34]
d [55, 34] [32, 35, 38] [22, 26]
e [66, 67] [33, 38, 39] [27, 34]
f [77, 45] [35, 36, 38] [11, 34]
发现我犯的错误 谢谢你的回复 我更改了如下功能:
def fl(x):
new = []
for i in x:
new.append([i[0], i[-1]])
return new
然后像这样应用函数
df.apply(lambda x : fl(x) if x.name in ['x', 'z'] else x)
然后我就能得到预期的输出。有没有办法使df.apply(lambda x:fl(x)如果x在['x','y']中,否则x)方法有效?@sharathchandramandadi-因为
x
这里不是列名,而是类似df['x']
,df['y']
df.apply(lambda x : fl(x) if x.name in ['x', 'z'] else x)