基于不同数据帧的列的可用元素创建pandas数据帧

时间:2013-12-02 21:31:30

标签: python pandas dataframe

基本上,我有一个数据框,其中b只能包含1,只有212的组合。如果它只有一个元素(例如1),那么缺少的元素(例如2)应该得到一个值,比如0

例如df = pd.DataFrame({'value':np.random.randn(3), 'b':[1,1,1]})

结果数据框应如下所示:

  value    b
-0.160580  1
0.100649   1
1.402768   1
0          2

但是,如果df = pd.DataFrame({'value':np.random.randn(3), 'b':[2,2,2]})

  value    b
0          1 
-0.390148  2
0.843670   2
-0.199137  2

如果df = pd.DataFrame({'value':np.random.randn(3), 'b':[1,2,2]})

  value    b
-0.912213  1
-1.827496  2
0.995711   2

我虽然启动了数据框:

df_init = pd.DataFrame({'value':[0,0],'b':[1,2]})

然后使用df具有的任何值更新它,并根据b1还是2放置它们,但不知道如何执行此操作。 ..

1 个答案:

答案 0 :(得分:0)

如果列中没有2,您可以append

In [11]: df.append(pd.Series({'value': 0, 'b': 2}), ignore_index=True)
Out[11]: 
   b     value
0  1  1.601810
1  1  1.483431
2  1 -0.781733
3  2  0.000000

[4 rows x 2 columns]

要检查,请先在列上使用set(如果重复使用并且可能的值较少,则效率更高):

In [12]: b_unique = df.b.unique()

In [13]: b_unique
Out[13]: array([1])

即,

In [14]: if 2 in s: # equivalently use if 2 in df['b'].unique()
             df.append(pd.Series({'value': 0, 'b': 2}), ignore_index=True)

In [15]: df
Out[15]: 
   b     value
0  1  1.601810
1  1  1.483431
2  1 -0.781733
3  2  0.000000

[4 rows x 2 columns]

您可以对1执行相同的检查。