Python 在dataframe中,根据其他两列中的结果生成第三列数据
我是数据帧的新手。我有Python 在dataframe中,根据其他两列中的结果生成第三列数据,python,pandas,dataframe,boolean,conditional-statements,Python,Pandas,Dataframe,Boolean,Conditional Statements,我是数据帧的新手。我有A、B和C列,希望使用A和B中的数据在C中创建一个值。例如,如果A=1和/或B=1,那么我想在C列中放置1,并对数据框中的所有行执行此逻辑 e、 g.起始阵列: A B C 0 1 0 1 0 1 2 1 1 3 0 0 A B C 0 1 0 1 1 0 1 1 2 1 1 1 3
A
、B
和C
列,希望使用A和B中的数据在C中创建一个值。例如,如果A=1
和/或B=1
,那么我想在C
列中放置1
,并对数据框中的所有行执行此逻辑
e、 g.起始阵列:
A B C
0 1 0
1 0 1
2 1 1
3 0 0
A B C
0 1 0 1
1 0 1 1
2 1 1 1
3 0 0 0
等
结果数组:
A B C
0 1 0
1 0 1
2 1 1
3 0 0
A B C
0 1 0 1
1 0 1 1
2 1 1 1
3 0 0 0
etc给定的起始DF为:
df = pd.DataFrame({'A': [1, 0, 1, 0], 'B': [0, 1, 1, 0]})
然后可以创建列C
,如下所示:
df['C'] = (df == 1).any(axis=1).astype(int)
然后将df
保留为:
A B C
0 1 0 1
1 0 1 1
2 1 1 1
3 0 0 0
使用:
或者更简单地将布尔值系列
转换为int
,方法是:
您可以使用numpy
logical\u和
和logical\u或
import numpy as np
df['C'] = np.logical_and(df['A'], df['B']).astype(int)
使用
列表压缩和压缩的其他解决方案
df['C'] = [(1 if i or j == 1 else 0) for i,j in zip(df['A'], df['B'])]
它返回:
A B C
0 1 0 1
1 0 1 1
2 1 1 1
3 0 0 0
如果'A'
和'B'
==
1使用&
,请更改条件:
例如:
df['C'] = [(1 if i & j == 1 else 0) for i,j in zip(df['A'], df['B'])]
这将返回:
A B C
0 1 0 0
1 0 1 0
2 1 1 1
3 0 0 0
df['C']=(df==1).any(axis=1).astype(int)
也许就足够了?@JohnGalt-yup-傻我-谢谢你。我已经更新了答案。
A B C
0 1 0 0
1 0 1 0
2 1 1 1
3 0 0 0