如何从单个 pandas 列创建值的所有组合?
How to create all combination of values from a single pandas column?
我有一个名为 df 的 table,它有两列 - 名称和数据。 table 如下
我正在尝试从数据列创建所有可能的值组合,并将结果作为单独的列连接到现有 table。基本上,在随后的每一列中,其中两个名称的值为 2 和 1.5,其余名称的值为 1。我正在寻找类似于以下 table:
的输出
虽然我已经能够使用以下代码找出将在下一列中取值为 2 和 1.5 的名称组合
for index in list(combinations(df[['Name']].index,2)):
print(df[['Name']].loc[index,:])
print('\n')
但是,我一直卡在如何创建上面提到的新列上。非常感谢任何帮助。
我认为您正在寻找排列,而不是组合。在这种情况下,我们可以生成这些并转置数据。转置后我们可以重命名列。
import pandas as pd
from itertools import permutations
df = pd.DataFrame({'Name':['A','B','C','D'],
'Data':[1,2,1,1.5]})
df = pd.DataFrame(list(permutations(df.Data.values,4)), columns=df.Name.values).T
df.columns = [f'Data{x+1}' for x in df.columns]
df.reset_index(inplace=True)
df.rename(columns={'index':'Name'}, inplace=True)
或者:
pd.DataFrame(list(permutations(df.Data.values,4)), columns=df.Name.values).T.add_prefix('Data').rename_axis('Name').reset_index()
输出
Name Data1 Data2 Data3 Data4 Data5 Data6 Data7 Data8 Data9 ... \
0 A 1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 ...
1 B 2.0 2.0 1.0 1.0 1.5 1.5 1.0 1.0 1.0 ...
2 C 1.0 1.5 2.0 1.5 2.0 1.0 1.0 1.5 1.0 ...
3 D 1.5 1.0 1.5 2.0 1.0 2.0 1.5 1.0 1.5 ...
我有一个名为 df 的 table,它有两列 - 名称和数据。 table 如下
我正在尝试从数据列创建所有可能的值组合,并将结果作为单独的列连接到现有 table。基本上,在随后的每一列中,其中两个名称的值为 2 和 1.5,其余名称的值为 1。我正在寻找类似于以下 table:
的输出虽然我已经能够使用以下代码找出将在下一列中取值为 2 和 1.5 的名称组合
for index in list(combinations(df[['Name']].index,2)):
print(df[['Name']].loc[index,:])
print('\n')
但是,我一直卡在如何创建上面提到的新列上。非常感谢任何帮助。
我认为您正在寻找排列,而不是组合。在这种情况下,我们可以生成这些并转置数据。转置后我们可以重命名列。
import pandas as pd
from itertools import permutations
df = pd.DataFrame({'Name':['A','B','C','D'],
'Data':[1,2,1,1.5]})
df = pd.DataFrame(list(permutations(df.Data.values,4)), columns=df.Name.values).T
df.columns = [f'Data{x+1}' for x in df.columns]
df.reset_index(inplace=True)
df.rename(columns={'index':'Name'}, inplace=True)
或者:
pd.DataFrame(list(permutations(df.Data.values,4)), columns=df.Name.values).T.add_prefix('Data').rename_axis('Name').reset_index()
输出
Name Data1 Data2 Data3 Data4 Data5 Data6 Data7 Data8 Data9 ... \
0 A 1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 ...
1 B 2.0 2.0 1.0 1.0 1.5 1.5 1.0 1.0 1.0 ...
2 C 1.0 1.5 2.0 1.5 2.0 1.0 1.0 1.5 1.0 ...
3 D 1.5 1.0 1.5 2.0 1.0 2.0 1.5 1.0 1.5 ...