如何创建一个列,使其值是该行中首次出现在其自己的列中的 1 的数量?
How do I create a column such that its values is count of the number of,1, in that row, which are appearing for the first time in their own column?
如何使用 pandas 执行此操作?
初测:
A B C D
0 0 1 0 0
1 0 1 0 0
2 0 0 1 1
3 0 1 0 1
4 1 1 0 0
5 1 1 1 0
最终目标:
A B C D Param
0 0 1 0 0 1
1 0 1 0 0 0
2 0 0 1 1 2
3 0 1 0 1 0
4 1 1 0 0 1
5 1 1 1 0 0
基本上,Param 是该行中第一次出现在其自己的列中的 1 的编号。
例子:
B 列中的索引 0 : 1 是第一次出现,因此 Param1 = 1
index 1 : 1 的 none 第一次出现在它自己的列中因此 Param1 = 0
C 列中的索引 2 : 1 和 D 首次出现在它们的列中,因此 Paramm1 = 2
index 3 : 1 的 none 第一次出现在它自己的列中因此 Param1 = 0
A 列中的索引 4 : 1 首次出现在该列中,因此 Paramm1 = 1
index 5 : 1 的 none 第一次出现在它自己的列中因此 Param1 = 0
您可以检查重复值,乘以 df
并求和:
df['Param'] = df.apply(lambda x: ~x.duplicated()).mul(df).sum(1)
输出:
A B C D Param
0 0 1 0 0 1
1 0 1 0 0 0
2 0 0 1 1 2
3 0 1 0 1 0
4 1 1 0 0 1
5 1 1 1 0 0
我会做 idxmax
和 value_counts
df['Param']=df.idxmax().value_counts().reindex(df.index,fill_value=0)
df
A B C D Param
0 0 1 0 0 1
1 0 1 0 0 0
2 0 0 1 1 2
3 0 1 0 1 0
4 1 1 0 0 1
5 1 1 1 0 0
假设这些是整数,您可以使用 cumsum() 两次来隔离第一次出现的 1。
df2 = (df.cumsum() > 0).cumsum() == 1
df['Param'] = df2.sum(axis = 1)
print(df)
如果df元素是字符串,你应该先把它们转换成整数。
df = df.astype(int)
如何使用 pandas 执行此操作?
初测:
A B C D
0 0 1 0 0
1 0 1 0 0
2 0 0 1 1
3 0 1 0 1
4 1 1 0 0
5 1 1 1 0
最终目标:
A B C D Param
0 0 1 0 0 1
1 0 1 0 0 0
2 0 0 1 1 2
3 0 1 0 1 0
4 1 1 0 0 1
5 1 1 1 0 0
基本上,Param 是该行中第一次出现在其自己的列中的 1 的编号。 例子: B 列中的索引 0 : 1 是第一次出现,因此 Param1 = 1
index 1 : 1 的 none 第一次出现在它自己的列中因此 Param1 = 0
C 列中的索引 2 : 1 和 D 首次出现在它们的列中,因此 Paramm1 = 2
index 3 : 1 的 none 第一次出现在它自己的列中因此 Param1 = 0
A 列中的索引 4 : 1 首次出现在该列中,因此 Paramm1 = 1
index 5 : 1 的 none 第一次出现在它自己的列中因此 Param1 = 0
您可以检查重复值,乘以 df
并求和:
df['Param'] = df.apply(lambda x: ~x.duplicated()).mul(df).sum(1)
输出:
A B C D Param
0 0 1 0 0 1
1 0 1 0 0 0
2 0 0 1 1 2
3 0 1 0 1 0
4 1 1 0 0 1
5 1 1 1 0 0
我会做 idxmax
和 value_counts
df['Param']=df.idxmax().value_counts().reindex(df.index,fill_value=0)
df
A B C D Param
0 0 1 0 0 1
1 0 1 0 0 0
2 0 0 1 1 2
3 0 1 0 1 0
4 1 1 0 0 1
5 1 1 1 0 0
假设这些是整数,您可以使用 cumsum() 两次来隔离第一次出现的 1。
df2 = (df.cumsum() > 0).cumsum() == 1
df['Param'] = df2.sum(axis = 1)
print(df)
如果df元素是字符串,你应该先把它们转换成整数。
df = df.astype(int)