我正在尝试使用 for 循环为数据框制作自定义列标题名称。目前我正在使用两个 for 循环来遍历数据帧,但不知道如何在不对其进行硬编码的情况下放入新的列标题。我有
df = pandas.DataFrame({
'A':[5,3,6,9,2,4],
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],})
result = []
for i in range(len(df.columns)):
SelectedCol = (df.iloc[:,i])
for c in range(i+1, len(df.columns)):
result.append(((SelectedCol+1)/ (df.iloc[:,c]+1)))
df1 = pandas.DataFrame(result)
df1=df1.transpose()
在 df 中,取第一列并乘以第二、第三和第四列。然后代码采用第二个,并将其乘以第三个和第四个,并在 for 循环中继续,因此输出列是 “AB”、“AC”、“AD”、“BC”、“BD”和“CD” '.
我可以在我的 for 循环中添加什么来提取列名,以便 df1 的每个列名可以是 'Long A, Short B' , 'Long A, Short C'.... 最后是 'Long C, Short D'
感谢您的帮助
答案 0 :(得分:1)
from itertools import combinations
for x,y in combinations(df.columns,2):
df['Long '+x+' Short '+y]=df[x]*df[y]
答案 1 :(得分:0)
import pandas
from itertools import combinations
df = pandas.DataFrame({
'A': [5, 3, 6, 9, 2, 4],
'B': [4, 5, 4, 5, 5, 4],
'C': [7, 8, 9, 4, 2, 3],
'D': [1, 3, 5, 7, 1, 0], })
# get all col name
for index, row in df.iteritems():
print(index)
# get all combinations
result = combinations(df.iteritems(), 2)
# calc
for name, data in result:
_name = name[0] + data[0]
_data = name[1] * data[1]
df[_name] = _data
print(df)
A
B
C
D
A B C D AB AC AD BC BD CD
0 5 4 7 1 20 35 5 28 4 7
1 3 5 8 3 15 24 9 40 15 24
2 6 4 9 5 24 54 30 36 20 45
3 9 5 4 7 45 36 63 20 35 28
4 2 5 2 1 10 4 2 10 5 2
5 4 4 3 0 16 12 0 12 0 0