Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在dataframe python中,根据上面的值分配值_Python_Pandas_Dataframe - Fatal编程技术网

在dataframe python中,根据上面的值分配值

在dataframe python中,根据上面的值分配值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧df1: df1 = pd.DataFrame(data = {'DF_1A' : ["A", 2, "B", 4, 5,6], 'DF_1B' : [10, 25, 40, 10, 15,12],'DF_3B' : np.nan}) 如果DF_1A中是数字(同一行),我必须为DF_3B赋值。 I上面有一个值,那么值是100,B是200。 毕竟,表格应该是这样的: 编辑: 所以我试着用另一种方式来解释。 将有穿过DF_1A柱的回路。让循环的每个元素都是x。然后: -如果x是

我有一个数据帧df1:

df1 = pd.DataFrame(data = {'DF_1A' : ["A", 2, "B", 4, 5,6], 'DF_1B' : [10, 25, 40, 10, 15,12],'DF_3B' : np.nan}) 

如果DF_1A中是数字(同一行),我必须为DF_3B赋值。
I上面有一个值,那么值是100,B是200。 毕竟,表格应该是这样的:

编辑: 所以我试着用另一种方式来解释。 将有穿过DF_1A柱的回路。让循环的每个元素都是x。然后:
-如果x是一个字母,则什么也不做
-如果x是数字,则有两种可能性
a) 如果x上方一行的值为字母,则在同一行的DF_3B列中指定字母(100或200)的等效值,其中为x
b) 如果x上方一行的值为数字,则在同一行的DF_3B列中,从上面一行中指定值DF_3B,其中为x

或者有其他更简单的方法

谢谢,,
Jarek不是最好的解决方案,但这会起作用:

d1=pd.DataFrame(数据={'dfu 1A':[“A”,2,“B”,4,5,6],'DF_1B':[10,25,40,10,15,12],'DF_3B':np.nan}

d1['temp']=np.where(d1['DF_1A'].shift(1)='A',1,2)

d1['DF_3B']=np.where(d1['DF_1A'].str.isdigit(),100,np.nan)*d1['temp']

d1.drop('temp',轴=1,在位=True)


d1.head()。您没有指定如何存储替换值,因此我假设使用字典:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(data = {'DF_1A' : ["A", 2, "B", 4, 5, 6, "A", 8, 9, 10], 'DF_1B' : [10, 25, 40, 10, 15, 12, 1, 3.7, 5, -2], 'DF_3B' : np.nan})

#transcription dictionary
transcr = {"A": 100, "B": 200}
#transfer values from row DF_1A to DF_3B, if they are in the dictionary
df1["DF_3B"] = df1.loc[df1["DF_1A"].isin(transcr), "DF_1A"]
#forward filling and substition of letters with values
df1["DF_3B"] = df1["DF_3B"].fillna(method='ffill').replace(transcr)
#resetting rows that contain letters to NaN
df1.loc[df1["DF_1A"].isin(transcr), "DF_3B"] = np.nan

print(df1)
输出

  DF_1A  DF_1B  DF_3B
0     A   10.0    NaN
1     2   25.0  100.0
2     B   40.0    NaN
3     4   10.0  200.0
4     5   15.0  200.0
5     6   12.0  200.0
6     A    1.0    NaN
7     8    3.7  100.0
8     9    5.0  100.0
9    10   -2.0  100.0

请澄清“I上面有一个值,那么B的值是100,B的值是200。”如果DF_1A列中有一个上面的数值,那么DF_3B列中的值(与数字行在同一行)是100,B的值是200。请查看输出表以了解想法-DF_3B列。仍然不清楚。请您解释一下:“我在DF_1A列中有一个以上的数值,那么在DF_3B列中与数字行相同的行中的数值是100,对于B来说是200。”似乎@Jarek的意思是如果不是(DF_1A[I].isdigit()),那么NaN elseif DF_1A[I-1]='A'&DF_1A[I]。isdigit()那么100,否则200我就是表示感谢您对shiftng的想法!我想我可以用它来写一些代码:)当然,在同一个数据集上使用shift和sort时要小心,因为shift操作索引,sort不会隐式重置索引。谢谢!我曾想过使用字典,但不知道如何实现它。那更适合我的需要。谢谢