根据其他列中的数据创建动态列

时间:2019-01-29 20:57:25

标签: python pandas

原始数据:

Data Set  
Day  100 200 300 400
1    2   4   6   8
2    3   5   7   9
3    4   6   8   10

所需的输出:

Day  Lookup Val  Value
1    100         2
2    400         9
3    200         6

基本上试图弄清楚如何创建第二个数据框,该数据框根据提供的查找值查询第一个数据框。预先感谢。

1 个答案:

答案 0 :(得分:0)

以下是可能的解决方案之一。对于非常大的数据帧,它可能会比较慢,但对于平均大小的数据应该可以正常工作。我假设查找信息已加载到某些数据帧中。如果您有任何问题,请告诉我。

days = [1,2,3]
_100 = [2,3,4]
_200 = [4,5,6]
_300 = [6,7,8]
_400 = [8,9,10]
# this is your actual data
df = pd.DataFrame({"Day":days, "100": _100, "200": _200, "300": _300, "400": _400})
df.set_index("Day", inplace=True)
days = [1,2,3]
lookup = [100,400,200]
#this is your look up table
dfLookup = pd.DataFrame({"Day":days, "Lookup Val": lookup})
def get_value(row):
    row_id = row["Day"]
    lookup_id = str(row["Lookup Val"])
    dfRow = df.loc[row_id].copy()
    dfRow = pd.DataFrame(dfRow)
    dfRow.reset_index(inplace=True)
    dfRow.columns = ["lookup", "values"]
    dictLookUp = dict(zip(dfRow["lookup"], dfRow["values"]))
    value = dictLookUp[lookup_id]
    dfRow = None
    return value

dfLookup["Value"] = dfLookup.apply(lambda row: get_value(row), axis=1)