我是数据帧的新手。我有列A
,B
和C
,并希望使用A和B中的数据在C中创建值。例如,如果A = 1
和/或{ {1}},然后我想在B = 1
列中放置一个1
,并为数据框中的所有行执行此逻辑。
e.g。起始阵列:
C
等
结果数组:
A B C
0 1 0
1 0 1
2 1 1
3 0 0
等
答案 0 :(得分:2)
给出起始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
答案 1 :(得分:2)
使用numpy.where
:
df['C'] = np.where(df.A | df.B, 1, 0)
print (df)
A B C
0 0 0 0
1 0 1 1
2 1 0 1
3 1 1 1
df['C'] = np.where((df.A == 0) & (df.B == 0), 0, 1)
print (df)
A B C
0 0 0 0
1 0 1 1
2 1 0 1
3 1 1 1
或者更简单地通过astype
将布尔Series
转换为int
:
df['C'] = (df.A | df.B).astype(int)
print (df)
A B C
0 0 0 0
1 0 1 1
2 1 0 1
3 1 1 1
df['C'] = (~((df.A == 0) & (df.B == 0))).astype(int)
print (df)
A B C
0 0 0 0
1 0 1 1
2 1 0 1
3 1 1 1
答案 2 :(得分:1)
使用list comprehesion
和zip
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
答案 3 :(得分:0)
def f(x):
if (x.B==1) and (x.A !=1): #Or whatever logic you like
return 1
else:
return 0
df['C'] = df.apply(lambda x: f(x), axis = 1)
答案 4 :(得分:0)
您可以使用numpy @echo off
echo hello 1234 > doc.txt
set /p contents = < doc.txt
echo The contents of "doc.txt"="%contents%"
pause
exit
和logical_and
logical_or