我有一列np.array数据,我将其添加到熊猫数据框的最后一列。但是,我需要在该np.array中以升序排序的数据。 (在获取它的数据框中,它没有按升序排序。)
数据帧结构:
GFP_spot_1_position, GFP_spot_2_position, GFP_spot_3_position, ...
0 _ 0.2, 0.4, 0.6, NaN
1 _ 0.8, 0.2, NaN, NaN
2 _ 0.7, 0.5, 0.6, 0.9
3 _ 0.5, NaN, 0.1, NaN
我希望它看起来像什么:
gfp_spots_all
0 _ [0.2, 0.4, 0.6, nan]
1 _ [0.2, 0.8, nan, nan]
2 _ [0.5, 0.6, 0.7, 0.9]
3 _ [0.1, 0.5, nan, nan]
下面的代码实际上是什么样子:
gfp_spots_all
0 _ [0.2, 0.4, 0.6, NaN]
1 _ [0.8, 0.2, NaN, NaN]
2 _ [0.7, 0.5, 0.6, 0.9]
3 _ [0.5, NaN, 0.1, NaN]
这是我到目前为止的代码:
df = pd.read_csv('dfall.csv')
dfgfp = df.loc[:, 'GFP_spot_1_position':'GFP_spot_4_position']
df['gfp_spots_all'] = dfgfp.apply(lambda r: list(r),
axis=1).apply(np.array)
df.head()
我无法对数组中的值进行显示或排序。请帮忙!另外,我也是python的新手,所以我正在学习。请随时纠正我的草率代码。
答案 0 :(得分:0)
看来可以,请参见下面的代码
arr = np.array([[3,5,1,7,4,2],[12,18,11,np.nan,np.nan,18]])
df = pd.DataFrame(arr)
print(df)
输出
0 1 2 3 4 5
0 3.0 5.0 1.0 7.0 4.0 2.0
1 12.0 18.0 11.0 NaN NaN 18.0
np.ndarray.sort(df.values)
print(df)
输出
0 1 2 3 4 5
0 1.0 2.0 3.0 4.0 5.0 7.0
1 11.0 12.0 18.0 18.0 NaN NaN
但是它将值和列不匹配,您打算这样做吗?
答案 1 :(得分:0)
按照@G。安德森(Anderson)的评论,在您的lambda表达式中添加sorted()
将解决此问题。实际上,示例中的很多代码都是多余的:
dfgfp = df.loc[:, 'GFP_spot_1_position':'GFP_spot_4_position']
df['gfp_spots_all'] = dfgfp.apply(lambda r: sorted(r), axis=1)
我相信这会满足您的要求。
答案 2 :(得分:0)
必须有一种更多的pythonique
方法,但这是解决此问题的一种方法:
In [1]:
import pandas as pd
# Create the Dataframe
data = {'col1': [[9, 3], [2, 4], [7, 6], [3, 3], [8, 0], [0,4]], 'col2': [[1,3], [9,4], [4,2], [5,1], [3,7], [9,8]]}
df = pd.DataFrame(data=data)
## Loop on each row
for i in range(len(df)):
## Loop on each column
for k in range(len(df.columns)):
df.iloc[i][k].sort()
df
Out [1]:
col1 col2
0 [3, 9] [1, 3]
1 [2, 4] [4, 9]
2 [6, 7] [2, 4]
3 [3, 3] [1, 5]
4 [0, 8] [3, 7]
5 [0, 4] [8, 9]
答案 3 :(得分:0)
describe 'passing values to shared context with let()' do
# "customization block"
include_context 'a context' do
# set value_from_spec here
let(:value_from_spec) { 1 }
end
describe 'the context' do
it 'should read the passed value in a let() block' do
expect(a_value_from_context).to eq(0)
end
it 'should read the passed value in a before() block' do
expect(@another_value_from_context).to eq(2)
end
end
end