2016-04-05 18 views
2
import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.randn(5, 3), columns=['A', 'B', 'C']) 
df2 = pd.DataFrame(np.random.randn(5, 3), columns=['X','Y','Z']) 

Ich kann die Werte in df auf Null leicht gesetzt, wenn sie weniger sind als eine Konstante:Sollwerte in Datenrahmen basierend auf Spalten in anderen Datenrahmen

df[df < 0.0] = 0.0 

kann mir jemand sagen, wie stattdessen zu vergleichen, um zu eine Spalte in einem anderen Datenrahmen? Ich nahm dies funktionieren würde, aber es funktioniert nicht:

df[df < df2.X] = 0.0 
+0

Sind Sie wollen Spalte oder reihenweise vergleichen? – EdChum

Antwort

1

IIUC müssen Sie lt verwenden und weitergeben axis=0 vergleichen spaltenweise:

In [83]: 
df = pd.DataFrame(np.random.randn(5, 3), columns=['A', 'B', 'C']) 
df2 = pd.DataFrame(np.random.randn(5, 3), columns=['X','Y','Z']) 
df 

Out[83]: 
      A   B   C 
0 2.410659 -1.508592 -1.626923 
1 -1.550511 0.983712 -0.021670 
2 1.295553 -0.388102 0.091239 
3 2.179568 2.266983 0.030463 
4 1.413852 -0.109938 1.232334 

In [87]: 
df2 

Out[87]: 
      X   Y   Z 
0 0.267544 0.355003 -1.478263 
1 -1.419736 0.197300 -1.183842 
2 0.049764 -0.033631 0.343932 
3 -0.863873 -1.361624 -1.043320 
4 0.219959 0.560951 1.820347 

In [86]: 
df[df.lt(df2.X, axis=0)] = 0 
df 

Out[86]: 
      A   B   C 
0 2.410659 0.000000 0.000000 
1 0.000000 0.983712 -0.021670 
2 1.295553 0.000000 0.091239 
3 2.179568 2.266983 0.030463 
4 1.413852 0.000000 1.232334 
Verwandte Themen