Очень похожий подход к методу @ DrewStephens, который использует API-интерфейс Java SE TimeUnit
(представленный в JDK1.5
) вместо простой конкатенации строк и, следовательно, (возможно) немного чище и выразительнее:
public class UnixTimestampDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser parser, DeserializationContext context)
throws IOException, JsonProcessingException {
String unixTimestamp = parser.getText().trim();
return new Date(TimeUnit.SECONDS.toMillis(Long.valueOf(unixTimestamp)));
}
}
Указание вашего пользовательского десериализатора (UnixTimestampDeserializer
) в поврежденном поле (f6):
@JsonDeserialize(using = UnixTimestampDeserializer.class)
private Date updatedAt;
Я не уверен, что вам нужно, поскольку ожидаемый результат отличается от вашего состояния, здесь я могу только исправить ваш код
for x,y in df.iterrows():
if y['a'] > y['b']:
df.loc[x,'a'] = df.loc[x,'b']
else:
df.loc[x,'b'] = df.loc[x,'a']
df
Out[40]:
id a b
0 a 1 1
1 b 2 2
2 c 2 2
Если я правильно понимаю вашу проблему
[ 111]Как и все остальные, не совсем уверен, что вы пытаетесь сделать, я собираюсь предположить, что вы хотите установить значение либо текущего значения «A», либо «B», чтобы оно было равным наибольшему значений любого столбца в этой строке ... Если это предположение верно, вот как это можно сделать с помощью ".apply ()".
Во-первых, большинство «чистых» приложений (помня, что применение «.apply ()» обычно никогда не рекомендуется) из «.apply ()» используют функцию, которая принимает ввод строки, переданной ей Функция ".apply ()" и обычно возвращает тот же объект, но измененный / измененный / и т. д. по мере необходимости. Имея в виду ваш фрейм данных, это функция для достижения желаемого результата, за которой следует применение функции к фрейму данных с использованием «.apply ()».
# Create the function to be used within .apply()
def comparer(row):
if row["a"] > row["b"]:
row["b"] = row["a"]
elif row["b"] > row["a"]:
row["a"] = row["b"]
return(row)
# Use .apply() to execute our function against our column values. Returning the result of .apply(), re-creating the "df" object as our new modified dataframe.
df = df.apply(comparer, axis=1)
Большинство, если не все, похоже, выступают против использования «.apply ()». Я, вероятно, прислушаюсь к их мудрости :)
Попробуйте:
df = pd.DataFrame({'a': [1, 2, 6], 'b': [4,5,2]})
df['a'] = df.max(axis=1)
df['b'] = df['a']