DataFrame 列的笛卡尔积并将新创建的行设置为 0 Python
Cartesian product of columns of a DataFrame and setting newly created rows to 0 in Python
假设,DataFrame 的形式为:
column1 column2 is_duplicate
0 xyz XYZ 1
1 xyz XyZ 1
2 abc ABC 1
3 abc aBc 1
如何在 column1
和 column2
上执行笛卡尔积,使得新创建的行的值为 0 而原始行在 is_duplicate
中的值仍然为 1专栏?
输出后的预期数据帧:
column1 column2 is_duplicate
0 xyz XYZ 1
1 xyz XyZ 1
2 xyz ABC 0
3 xyz aBc 0
4 abc XYZ 0
5 abc XyZ 0
6 abc ABC 1
7 abc aBc 1
您可以使用 pd.MultiIndex.from_product
来形成笛卡尔积。
由于这是一个索引,您可以将其传递给 df.reindex
以扩展 DataFrame
为索引中的每个值包含一行:
import numpy as np
import pandas as pd
df = pd.DataFrame({'column1': ['xyz', 'xyz', 'abc', 'abc'],
'column2': ['XYZ', 'XyZ', 'ABC', 'aBc'],
'is_duplicate': [1, 1, 1, 1]})
cols = ['column1', 'column2']
index = pd.MultiIndex.from_product([df[col].unique() for col in cols],
names=cols)
result = df.set_index(['column1','column2']).reindex(index, fill_value=0).reset_index()
print(result)
产量
column1 column2 is_duplicate
0 xyz XYZ 1
1 xyz XyZ 1
2 xyz ABC 0
3 xyz aBc 0
4 abc XYZ 0
5 abc XyZ 0
6 abc ABC 1
7 abc aBc 1
假设,DataFrame 的形式为:
column1 column2 is_duplicate
0 xyz XYZ 1
1 xyz XyZ 1
2 abc ABC 1
3 abc aBc 1
如何在 column1
和 column2
上执行笛卡尔积,使得新创建的行的值为 0 而原始行在 is_duplicate
中的值仍然为 1专栏?
输出后的预期数据帧:
column1 column2 is_duplicate
0 xyz XYZ 1
1 xyz XyZ 1
2 xyz ABC 0
3 xyz aBc 0
4 abc XYZ 0
5 abc XyZ 0
6 abc ABC 1
7 abc aBc 1
您可以使用 pd.MultiIndex.from_product
来形成笛卡尔积。
由于这是一个索引,您可以将其传递给 df.reindex
以扩展 DataFrame
为索引中的每个值包含一行:
import numpy as np
import pandas as pd
df = pd.DataFrame({'column1': ['xyz', 'xyz', 'abc', 'abc'],
'column2': ['XYZ', 'XyZ', 'ABC', 'aBc'],
'is_duplicate': [1, 1, 1, 1]})
cols = ['column1', 'column2']
index = pd.MultiIndex.from_product([df[col].unique() for col in cols],
names=cols)
result = df.set_index(['column1','column2']).reindex(index, fill_value=0).reset_index()
print(result)
产量
column1 column2 is_duplicate
0 xyz XYZ 1
1 xyz XyZ 1
2 xyz ABC 0
3 xyz aBc 0
4 abc XYZ 0
5 abc XyZ 0
6 abc ABC 1
7 abc aBc 1